SQL 服务器 Try/Catch、Begin/Tran、RaiseError、循环和 Return。什么是正确的顺序?

SQL Server Try/Catch, Begin/Tran, RaiseError, Loop, & Return. What's the right order?

我有以下程序。 (语法不完善,只是想给大家一个思路)。

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" 吗?

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

看一眼这个问题(你的真实问题):

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

30 秒的流程如下:像您所做的那样使用 try/catch 块,并在您的程序结束时有一个名为 "failure" 的部分,所有捕获将指向该部分。您可以在每个记录中设置一条消息,或将错误传递给最终用户。