あなたの INSERT
ステートメントは常にトランザクションで実行されます。トランザクションを明示的に定義しているか、定義していない場合、SQL Server は暗黙的なトランザクションを使用します。
テーブルに 1 つ (または複数) の行を挿入しています。次に - まだトランザクション内で - AFTER INSERT
トリガーが実行され、特定の条件がチェックされます - 通常は Inserted
を使用します 挿入された行を含む、トリガー内で使用可能な疑似テーブル。
ROLLBACK TRANSACTION
を呼び出した場合 あなたのトリガーで、はい - あなたのトランザクションは、それが行っていたすべてのことでロールバックされます まるで INSERT
決して起こらなかった - データベーステーブルには何も表示されません。
また:FOR INSERT
AFTER INSERT
と同じです SQL Server - トリガーは後に実行されます INSERT
ステートメントはその役割を果たしました。
心に留めておくべきこと (多くのプログラマーが誤解しています):トリガーは ステートメントごとに 1 回起動されます。 - しない 1行に1回!したがって、一度に 20 行を挿入すると、トリガーは 1 回 起動されます。 そして Inserted
トリガー内の疑似テーブルには 20 行が含まれます。トリガーを書くときはそれを考慮に入れる必要があります - あなたはそうではありません 挿入される単一の行だけを常に処理します!