トランザクションと組み合わせてトリガーする


25

次の状況があると仮定します。

Table_Aトリガーがオンになっているテーブル(たとえば)がありINSERTます。トリガージョブはtable_B、に挿入された値に基づいていくつかの行を更新しtable_Aます。

さて、テーブルに単純に行を挿入するだけで問題ありませんが、トランザクションを介してデータを挿入する状況についてはどうでしょうか?トリガーは、すべてのトランザクションステートメントが正常に実行されるまで待機しますか、それとも挿入を認識するとすぐに起動しますか?最初の挿入を認識するとすぐにトリガーが起動する場合、最後の行でトランザクションが失敗するとどうなりますか?その状況に何らかのメカニズムがありますか?

回答:


37

挿入は常にトランザクション内にあります。

明示的でない場合、BEGIN TRAN ... COMMITまたはSET IMPLICIT_TRANSACTIONS ONステートメントは自己完結型の自動コミットトランザクションとして実行されます。

トリガーは、トリガーを起動するアクションのトランザクションの一部です。トリガーでエラーが発生し、トランザクションのロールバックが発生した場合、起動アクションもロールバックされます。

トリガーは暗黙的にXACT_ABORTオンになります。この設定をオンにしたエラーは、トランザクションのロールバックに自動的につながります(RAISERRORステートメントを含むコードで発生したエラーを除く)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.