2

複数の更新クエリと挿入クエリを含む SP があります。いずれかのクエリでエラーが発生した場合、実行は次のステートメントに移動しますか? 例えば、

CREATE PROCEDURE Test()
AS
BEGIN
    INSERT INTO SomeTable VALUES (1, 2, 3)
    UPDATE SomeTable SET X = 4 WHERE Y = 5
END

上記の例で、INSERT ステートメントがエラーをスローした場合、実行は次の UPDATE ステートメントに移動しますか?

4

1 に答える 1

1

エラーの重大度によって異なります。重大度が 19 以上の場合、バッチは中止されます。

構成不可能なデータベース エンジンの制限を超え、現在のバッチ プロセスが終了したことを示します。重大度が 19 以上のエラー メッセージは、現在のバッチの実行を停止します。

ただし、上記のコードがブロック内で実行されるBEGIN TRY/BEGIN CATCH(またはそのようなブロックから呼び出される) 場合、重大度 10-18 のエラーにより、制御フローが catch ブロックにジャンプすることに注意してください (これは、実行が中止されたと言うのとは異なります) ) したがって、次のステートメントは実行されません。

さらに、このXACT_ABORT設定により、現在のトランザクションがロールバックされ、現在のバッチが中止されます。

確実なストアド プロシージャ コードの記述方法のテンプレートが必要な場合は、「例外処理とネストされたトランザクション」を参照してください。

于 2012-04-06T23:03:37.673 に答える