我有以下程序。 (语法不完美,只是想给你们一个想法)。
begin tran
begin try
while loop
some condition, if true
raiseerror('error', 16, 1)
end try
begin catch
if transaction > 0
rollback tran
select error message
end catch
if transaction > 0
commit tran
问题:
引发错误是否会强制执行catch块?如果是,那么事务是否会完全回滚(对于循环的所有迭代)?
我想要#1是这样的,我是否需要添加" RETURN"在rollback tran?
我问这个问题,因为看起来循环在迭代中出现一些错误后仍然继续。
答案 0 :(得分:1)
看一看这个问题(真的问你):SQL Server XACT_ABORT with exclusion
虽然问题略有不同,但它显示了如何完成你想要做的事情的基本结构。
30秒的破坏如下:像你一样使用try / catch块,并在程序结束时有一个名为“失败”的部分,所有捕获将指向该部分。您可以在每个catch中为日志记录设置消息,或将错误传递给最终用户。