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