您的位置:首页 > 其它

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

2012-02-22 21:01 645 查看
解决办法一:

在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了。
这比第一种方法在烦一点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: