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 に答える