如果我正在编写SQL Server (2008r2)过程的代码,并将其包装在事务中,我是否需要显式地将其封装在try..catch块中,然后在catch块中显式调用rollback,或者它是否会退出并自行回滚?
即:
如何做到这一点:
begin transaction
begin try
delete from....
insert into...
end try
begin catch
rollback transaction
return
end catch
commit transaction
请比较:
begin transaction
delete from....
insert into...
commit transaction
谢谢你的帮助。
发布于 2012-06-08 21:59:12
如果在大多数情况下(但不是全部)出现错误,则会自动进行回滚
如果要保证回滚所有错误,请在begin transaction之前使用SET XACT_ABORT ON
最佳实践是显式地使用try-catch块捕获错误,并在那里采取操作,可能包括回滚和报告/记录错误。
https://stackoverflow.com/questions/10950197
复制相似问题