事务提交及回滚的具体写法

解决办法一:    

在begin transaction 前面加set xact_abort on

这样就可以在过程出错时中断执行,当然也就不能commit了,如此再在最后一个操作的后面加入 if @error=0 就说明所有的操作都执行成功了就可以commit。

具体如:

  set xact_abort on
begin trans
declare ...
<1>操作
<2>操作
...
<n>操作
if @error<>0
begin
rollback transaction
end
else
begin
commit transaction
end
end

 解决办法二:
   不加 set xact_abort on 而是声明一个记录错误的变量
   比如: 

    begin trans
declare @nror int
set @nror=0
<1>操作
set @nror=@nror+@@error
<2>操作
set @nror=@nror+@@error
...
<n>操作
set @nror=@nror+@@error
if @ror<>0
begin
rollback transaction
end
else
begin
commit transaction
end
end

显然这样在每一个操作的背后都要加入一个记录错误的操作 
最后再判断错误是不是0,如果不是则说明过程中某一步出了错,就不commit了。     
这比第一种方法在烦一点。

原文地址:https://www.cnblogs.com/leonkin/p/2363814.html