1

我有以下程序。(语法并不完美,只是想给你们一个想法)。

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

问题:

  1. raise 错误会强制 catch 块吗?如果是这样,事务是否会完全回滚(对于循环的所有迭代)?

  2. 我希望 #1 是这种情况,是否需要在回滚 tran 后添加“RETURN”?

我问这个问题是因为即使在迭代中出现一些错误之后,循环似乎仍在继续。

4

1 回答 1

1

看看这个问题(你真的问过):SQL Server XACT_ABORT with exclude

虽然问题略有不同,但它显示了如何完成您正在尝试做的事情的基本结构。

30 秒的运行时间如下:像您所做的那样使用 try/catch 块,并在您的过程结束时有一个名为“失败”的部分,所有捕获都将指向该部分。您可以在每个捕获中为您的日志记录设置一条消息,或者将错误传递给最终用户。

于 2017-07-27T20:48:06.860 回答