SQL Server Try / Catch,Begin / Tran,RaiseError,Loop,&返回。什么是正确的订单?

时间:2017-07-27 19:36:37

标签: sql sql-server raiseerror

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

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. 引发错误是否会强制执行catch块?如果是,那么事务是否会完全回滚(对于循环的所有迭代)?

  2. 我想要#1是这样的,我是否需要添加" RETURN"在rollback tran?

  3. 之后

    我问这个问题,因为看起来循环在迭代中出现一些错误后仍然继续。

1 个答案:

答案 0 :(得分:1)

看一看这个问题(真的问你):SQL Server XACT_ABORT with exclusion

虽然问题略有不同,但它显示了如何完成你想要做的事情的基本结构。

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