sql 循环执行游标

时间:2021-01-09 20:27:55
---定义开始和结束时间
declare @st_dt datetime
declare @en_dt datetime
---时间赋值
select @st_dt = '20150601'
select @en_dt = '20150930'
 
---定义中间变量
declare @dt datetime
select @dt = @st_dt
 
---开始按照时间循环执行
while @dt <= @en_dt
begin
    ---这个是个演示,可以替换为需要执行的存储过程
  DECLARE @Tel varchar(50),
        @ID varchar(50)
DECLARE Subscribe_Cursor CURSOR --定义游标
FOR
(
    select top 360 CONVERT(VARCHAR(20),CONVERT(DECIMAL(20,0),F1)),id from SData where Tag=0
)
OPEN Subscribe_Cursor; --打开游标
FETCH NEXT FROM Subscribe_Cursor INTO @Tel,@ID
WHILE @@FETCH_STATUS = 0
    BEGIN
    insert into LS_ReCall(Tel,ReCallPlanDate)values(@Tel,@dt)
    update SData set Tag=1 where id=@ID
     FETCH NEXT FROM Subscribe_Cursor INTO @Tel,@ID; 
    END
CLOSE Subscribe_Cursor; --关闭游标
DEALLOCATE Subscribe_Cursor; --释放游标
    ---中间变量加1
    select @dt = DATEADD(DAY,1,@dt)
    
end



---定义开始和结束时间
declare @st_dt datetime
declare @en_dt datetime
---时间赋值
select @st_dt = '20150602'
select @en_dt = '20150930'
 
---定义中间变量
declare @dt datetime
select @dt = @st_dt
 
---开始按照时间循环执行
while @dt <= @en_dt
begin
      ---定义开始和结束工号
        declare @st_code int
        declare @en_code int
        ---工号赋值
        select @st_code =1
        select @en_code = 18
        ---定义中间变量
        declare @code int
        select @code = @st_code
        while @code <= @en_code
        begin
                DECLARE @ID varchar(50)
        DECLARE Subscribe_Cursor CURSOR --定义游标
        FOR
        (
              select top 20 id from LS_ReCall where ReCallPlanDate=@dt and EmpCode is null
        )
        OPEN Subscribe_Cursor; --打开游标
        FETCH NEXT FROM Subscribe_Cursor INTO @ID
        WHILE @@FETCH_STATUS = 0
            BEGIN
            update LS_ReCall set EmpCode=@code where id=@ID
            FETCH NEXT FROM Subscribe_Cursor INTO @ID; 
            END
        CLOSE Subscribe_Cursor; --关闭游标
        DEALLOCATE Subscribe_Cursor; --释放游标
        ---中间变量加1
       select @code = @code+1
        end
    ---中间变量加1
    select @dt = DATEADD(DAY,1,@dt)
    
end