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        --调用存储过程

 

相关文章:

  • 2022-12-23
  • 2021-09-27
  • 2021-06-12
  • 2021-07-09
  • 2022-12-23
  • 2021-06-09
  • 2022-01-01
猜你喜欢
  • 2022-12-23
  • 2021-07-07
  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
  • 2021-10-19
相关资源
相似解决方案