SQL Server の DML トリガー

SQL Server の DML トリガー

SQL Server のトリガー 」 では、トリガーの種類について説明しました。

今回は、テーブルやビューに対して、データの挿入・変更・削除等が起こった時に実行される、DML(データ操作言語)トリガーについて、少し詳しく見てみましょう。


DML トリガーの種類

DML トリガーには、「 AFTER トリガー 」 と 「 INSTEAD OF トリガー 」 があります。

どちらも、そのトリガーを有効にするデータ変更ステートメントの INSERT、UPDATE、DELETE を指定して生成します。

AFTER トリガーは、データの挿入・変更・削除等が起こった後に実行されるトリガーで、ひとつのテーブルに対して、複数作ることができます。

INSTEAD OF トリガーは、イベントを起こしたデータの挿入・変更・削除等のスクリプトの代わりに実行されるトリガーで、INSERT、UPDATE、DELETE ごとにひとずつしか作成できません。

INSTEAD OF トリガーを使うと、データの整合性を保つためにエラーチェックをして、エラーの場合はトランザクションをロールバックすることも可能です。

inserted テーブルと deleted テーブル

DML トリガーを作る際に欠かせない存在なのが、inserted テーブルと deleted テーブルです。

inserted テーブルと deleted テーブルは、SQL Server が自動的に生成してくれる、トリガーを生成したテーブルのフォーマットとテーブルで、トリガー内からアクセスできます。


INSERT に有効なトリガーを生成した時は、 inserted テーブルに新規挿入されたデータが入っています。

UPDATE に有効なトリガーを生成した時は、 deleted テーブルに更新前のデータが入り、inserted テーブルに更新後のデータが入っています。

DELETE に有効なトリガーを生成した時は、 deleted テーブルに削除されたデータが入っています。


このような inserted テーブルと deleted テーブルに格納されているデータを使って、データの整合性をチェックしたり、履歴を保存したりすることができます。

UPDATE に有効なトリガーでは、inserted テーブルと deleted テーブルの値を比較することによって、変更箇所を特定することも可能です。


それでは、AFTER トリガーを生成して、データの更新履歴を残してみましょう。

© 2010-2024 SQL Server 入門