3
这种情况会发生什么?这里发生了什么? SQL Server - XACT_ABORT ON + @@ ERROR检查。 。
SET XACT_ABORT ON
BEGIN TRANSACTION
---DO SOMETHING HERE THAT CAUSES AN ERROR
COMMIT TRANSACTION
if @@error != 0
raiserror('SP failed. Step 7.', 20, -1) with log GO
我的猜测是因为XACT_ABORT
是ON
的COMMIT TRANSACTION
从未发生(因为整个事情是回滚和终止的),而且也没有最后一条语句(检查@@error
,然后调用raiseerror
)。
@gbn:谢谢。因为那是在尝试...赶上...如果之后有声明,他们会执行,正确吗?如果他们这样做,他们会以同样的方式对xact_abort做出反应,即。 xact_abort会适用于SP中的每个事务吗?或者只是第一个?听起来像我知道的一个愚蠢的问题,但我只是想确定。 – richard 2011-05-11 19:22:41
只是为了澄清。 。 。如果没有try/catch,整个事情就会终止,没有任何语句会被执行。用try/catch,它会中止那个事务,但是接着转到下一个语句? – richard 2011-05-11 19:23:50
XACT_ABORT ON适用于整个范围/批次。这是一个存储过程。是的,在CATCH执行后的代码 – gbn 2011-05-11 19:24:03