参考 https://www.cnblogs.com/JentleWang/p/3654603.html
https://blog.csdn.net/tuzhen007/article/details/11183961
create proc proc_example as begin --声明变量,存放当前已开启的事务数 declare @exist_trancount int select @exist_trancount = @@trancount if @exist_trancount > 0 --创建事务保存点 save transaction tran_proc else --开启新事务 begin transaction tran_proc /* 存储过程业务处理代码 ········· */ if @@error<>0 goto error if @exist_trancount = 0 --提交事务 commit tran tran_proc return 1 error: --回滚事务或者事务保存点 --rollback transaction tran_proc
if @exist_trancount > 0
begin
rollback transaction tran_proc
end
else
begin
rollback tran
end
return -1 end
- 提交的事务不能撤销或回滚。
- 当不存在打开的事务时,@@trancount 等于 0。
- 执行 begin tran [tranName]语句将 @@trancount 增加 1。
- 执行commit tran [tranName]语句将 @@trancount 减小 1。
- 执行 rollback tran 会回滚整个事务并设置@@trancount 为 0。