ホームページ >データベース >mysql チュートリアル >SQL Server はバッチ化されたコマンドでエラーが発生した場合、トランザクション全体をロールバックしますか?

SQL Server はバッチ化されたコマンドでエラーが発生した場合、トランザクション全体をロールバックしますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-10 22:35:44213ブラウズ

Does SQL Server Roll Back Entire Transactions on Error in Batched Commands?

SQL Server トランザクション処理: エラーのロールバック動作

複数の SQL ステートメントを 1 つのバッチ コマンドとして実行する場合は、データベースのトランザクション動作を必ず考慮してください。具体的には、1 つ以上のステートメントでエラーが発生した場合、トランザクション全体をロールバックする必要がありますか?

SQL Server では、デフォルトの動作では、障害が発生するとトランザクション全体がロールバックされます。ただし、場合によっては (質問に示されている例など)、

<code class="language-sql">BEGIN TRAN;
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
COMMIT TRAN;</code>

SQL ステートメントが単一の文字列コマンドとして送信される場合、ロールバック動作が期待どおりにならない可能性があります。

失敗したステートメントが自動的にロールバックをトリガーするようにするには、トランザクションを開始する前に SET XACT_ABORT ON ステートメントを使用します。このコマンドは、セッションのトランザクション動作を変更し、エラーが発生するとトランザクションがただちにロールバックされるようにします。この場合、挿入操作は元に戻され、トランザクションは正常に完了しません。

XACT_ABORT ON を明示的に設定すると、エラー発生時にデータベースが一貫して動作することが保証され、データの整合性が確保され、偶発的な変更が防止されます。この設定は現在のセッションにのみ適用され、後続のトランザクションには影響しないことに注意してください。

以上がSQL Server はバッチ化されたコマンドでエラーが発生した場合、トランザクション全体をロールバックしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。