这里发生了什么? SQL Server - XACT_ABORT ON + @@ ERROR检查。 。

时间:2011-05-11 19:17:24

标签: sql-server transactions raiseerror xact-abort

这种情况会发生什么?

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_ABORTONCOMMIT TRANSACTION永远不会发生(因为整个事情被回滚并终止),最后一个语句也没有(检查@@error 1}}然后调用raiseerror)。

1 个答案:

答案 0 :(得分:3)

正确。

SET XACT_ABORT跳出批处理。您的IF是同一批次的一部分。

如果您想要对错误进行一些处理,请使用BEGIN TRY等

SET XACT_ABORT ON
BEGIN TRY
BEGIN TRANSACTION

    ---DO SOMETHING HERE THAT CAUSES AN ERROR

COMMIT TRANSACTION
END TRY
BEGIN CATCH
    raiserror('SP failed. Step 7.', 20, -1) with log
END CATCH
GO

我也对严重程度20感兴趣,因为它打破了连接。通常你会使用16这是用户定义的错误。