sql server在存储过程中使用游标和事务

create PROCEDURE pro_test
@classID int
AS
BEGIN
    SET NOCOUNT ON;
    begin tran                --开始事务
        declare @error int;    --临时变量
        declare @id int
        declare mycursor cursor        --定义游标
        for select id from test where classID=@classID     --将数据导入游标
        open mycursor        --打开游标
        fetch next from mycursor into @id        --将游标中的数据导入临时变量中,多个变量以逗号隔开
        while @@fetch_status =0        --游标循环
        begin
            --sql语句执行部分
            delete from test where ClassID != @classID 
            if @@ERROR <>0        --执行失败,记录到临时变量
                set @error =@error +1;
            update test set name='在存储过程中使用事务和游标' where ID=@id
            if @@ERROR <>0
                set @error =@error +1;
            fetch next from mycursor into @id        --转向下一条数据
        end                    --循环结束
        close mycursor        --关闭游标
        deallocate mycursor    --释放游标
        
    if @error <>0    --执行失败,回滚事务
        rollback tran;
    else            --执行成功,提交事务
        commit tran;
END
GO

exec pro_test 1        --调用存储过程
原文地址:https://www.cnblogs.com/bingle/p/3033970.html