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 トリガーを生成して、データの更新履歴を残してみましょう。