• 取原月的计划内容作为计划表目标月的计划内容,取原月的任务内容作为任务表目标月的任务内容 <游标>


    ALTER PROCEDURE [dbo].[DustPatrol_Copy_PlanTasks]
        -- Add the parameters for the stored procedure here
        @NewDate DATETIME,
        @OldDate DATETIME
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        -- Insert statements for procedure here
        DECLARE @PlanID INT
        DECLARE @PlanName VARCHAR(50)
        DECLARE @InspectorID INT
        DECLARE @InspectorGroupID INT
        DECLARE @Enabled INT
        DECLARE @CreateUserID INT
        DECLARE @BeginTime DATETIME
        DECLARE @EndTime DATETIME
        DECLARE @Remark VARCHAR(1000)
        DECLARE @count INT
        SET @count=0
        BEGIN TRAN  --启动事务
            PRINT '启动事务'
            DECLARE @ERROR int
            SET @ERROR=0
            BEGIN
                print '定义游标'
                DECLARE syscolumns_cursor CURSOR FOR
                    SELECT ID,InspectorID,InspectorGroupID,[Enabled],CreateUserID,BeginTime,EndTime,Remark,PlanName
                        FROM dbo.tblDustPatrolPlan
                        WHERE BeginTime BETWEEN CONVERT(DATETIME,CONVERT(VARCHAR(8),@OldDate,120)+'01',120)
                                AND DATEADD(MS,-3,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@OldDate),1)-1)
                OPEN syscolumns_cursor
                FETCH NEXT FROM syscolumns_cursor INTO @PlanID,@InspectorID,@InspectorGroupID,@Enabled,@CreateUserID,@BeginTime,@EndTime,@Remark,@PlanName
                print '打开游标'
                print @PlanID
                WHILE(@@fetch_status=0)--判断是否读到了记录
                BEGIN
                    print '插入计划'
                    print @PlanID
                    print @BeginTime
                    INSERT INTO dbo.tblDustPatrolPlan(InspectorID,InspectorGroupID,[Enabled],CreateUserID,BeginTime,EndTime,Remark,PlanName)
                    VALUES(@InspectorID,@InspectorGroupID,@Enabled,@CreateUserID,
                        CASE WHEN
                        DAY(@BeginTime)
                        >
                        DAY(DATEADD(MS,-3,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@OldDate),1)-1))
                        THEN
                        CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),MONTH(@NewDate))+'-'+CONVERT(CHAR(3),
                            CONVERT(CHAR(3),DAY(DATEADD(MS,-3,DATEADD(MONTH,1,CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),
                            MONTH(@NewDate))+'-1 0:00:00.000')))))+CONVERT(char(10),@BeginTime,108)))
                        ELSE
                        CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),MONTH(@NewDate))+'-'+CONVERT(CHAR(3),DAY(@BeginTime))+CONVERT(char(10),@BeginTime,108))
                        END,
                        CASE WHEN
                        DAY(@EndTime)
                        >
                        DAY(DATEADD(MS,-3,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@NewDate),1)-1))
                        THEN
                        CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),MONTH(@NewDate))+'-'+CONVERT(CHAR(3),
                            CONVERT(CHAR(3),DAY(DATEADD(MS,-3,DATEADD(MONTH,1,CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),
                            MONTH(@NewDate))+'-1 0:00:00.000')))))+CONVERT(char(10),@EndTime,108)))
                        ELSE
                        CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),MONTH(@NewDate))+'-'+CONVERT(CHAR(3),DAY(@EndTime))+CONVERT(char(10),@EndTime,108))
                        END,
                        @Remark,@PlanName)

                    SET @count=@count+@@Rowcount
                        IF (@ERROR <>0) GOTO EXT
                    print '        插入任务'

                    INSERT INTO dbo.tblDustPatrolTask(PlanID,BeginTime,Periodicity,RepeatInterval,AreaID,[Status],InspectorID,[Name],ActionTime,[Description])
                        SELECT IDENT_CURRENT('tblDustPatrolPlan'),
                                CONVERT(DATETIME,CONVERT(CHAR(4),YEAR(@NewDate))+'-'+CONVERT(CHAR(2),MONTH(@NewDate))+'-'+CONVERT(CHAR(3),DAY(BeginTime))+CONVERT(char(10),BeginTime,108)),
                                Periodicity,0,AreaID,0,InspectorID,[Name],null,[Description]
                        FROM dbo.tblDustPatrolTask
                        WHERE PlanID = @PlanID
                            and (BeginTime BETWEEN CONVERT(DATETIME,CONVERT(VARCHAR(8),@OldDate,120)+'01',120)
                                AND DATEADD(MS,-3,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@OldDate),1)-1))

                    SET @count=@count+@@Rowcount
                    PRINT '小计:影响'+CONVERT(VARCHAR,@count)+'行'

                    SET @ERROR =@ERROR +@@ERROR
                        IF (@ERROR <>0) GOTO EXT

                    FETCH NEXT FROM syscolumns_cursor INTO @PlanID,@InspectorID,@InspectorGroupID,@Enabled,@CreateUserID,@BeginTime,@EndTime,@Remark,@PlanName
                END
                print '结束游标'
                CLOSE syscolumns_cursor
                DEALLOCATE syscolumns_cursor

               --异常出口
               EXT:
                
               --判断执行状态
                IF (@ERROR =0)
                    BEGIN
                        PRINT '提交事务'
                        COMMIT
                    END
                ELSE
                    BEGIN
                        PRINT '回滚事务'
                        ROLLBACK
                    END
            PRINT '共影响'+CONVERT(VARCHAR,@count)+'行'
        END
    END
  • 相关阅读:
    业余时间决定人生
    单片机好网站
    坚持 放弃
    励志博客园网址
    资料下载好网站
    和易法
    二、栈
    一、顺序表
    uCOS任务中的OSTCBDly
    三(1)、队列(链队列)
  • 原文地址:https://www.cnblogs.com/zjp8023/p/SQL05.html
Copyright © 2020-2023  润新知