3

这种情况会发生什么?

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

4

1 回答 1

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 这是用户定义的错误。

于 2011-05-11T19:20:35.313 回答