Live2D

sqlserver 游标嵌套

游标嵌套

BEGIN TRANSACTION; --事务
declare
@resourceId int --节Id declare @newResourceId int --新的节Id declare @courseId int --课程Id declare @newCourseId int --新的课程Id declare @sign int--计数器 set @sign=0 DECLARE My_Cursor CURSOR --定义游标 FOR (select [1_Resource].Id from [1_Resource] where TrainTargetId=12 and IsDelete=0) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @resourceId; --读取第一行数据(将[1_Resource]表中的Id放到@resourceId变量中) WHILE @@FETCH_STATUS = 0 BEGIN set @sign+=1 print 'resourceId_'+convert(nvarchar(10),@resourceId)
--执行脚本后 如果有异常,回滚

IF @@ERROR <> 0
BEGIN
ROLLBACK ;
CLOSE my_cursor;
DEALLOCATE my_cursor;
END

--嵌套游标
         DECLARE My_Cursor_2 CURSOR --定义游标
            FOR 
            (select [1_CourseResource].CourseId from [1_CourseResource] where ResourceId = @resourceId) --查出需要的集合放到游标中
            OPEN My_Cursor_2; --打开游标
            FETCH NEXT FROM My_Cursor_2 INTO @courseId; --读取第一行数据(将[1_CourseResource]表中的CourseId放到@courseId变量中)
            WHILE @@FETCH_STATUS = 0
            begin    
                --需要执行的脚本
                FETCH NEXT FROM My_Cursor_2 INTO @courseId; --读取下一行数据(将1_CourseResource表中的CourseId放到@courseId变量中)
            end
            CLOSE My_Cursor_2; --关闭游标
            DEALLOCATE My_Cursor_2; --释放游标

        print @sign
                
        FETCH NEXT FROM My_Cursor INTO @resourceId; --读取下一行数据(将[1_Resource]表中的Id放到@resourceId变量中)
    END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标


COMMIT TRANSACTION;--没有问题,提交事务


GO

 

posted @ 2022-05-09 21:36  webmtjj  阅读(730)  评论(0)    收藏  举报