・ | トランザクション(トリガイベント)実行前後のステートメントを定義した特殊なストアドプロシージャ |
・ | トリガ自体はトリガイベント実行時に自動実行 → 直接呼出し不可 |
○ トリガの用途
※ | 基本的に制約で対応できない複雑な機能を処理するために使用 | |
・ | データの整合性保持 (← 参照整合性制約) | |
− | テーブルや列の値の整合性を保持するため、アプリケーションに依存せずデータを自動処理 | |
・ | 初期値のセット (← デフォルト制約) | |
− | 他の行やテーブルなどとの関係で初期値を求めるような複雑な処理 | |
・ | 値の妥当性チェック (← チェック制約) | |
− | 他の行やテーブルなどとの関係で値の妥当性をチェックするような複雑なチェック | |
※ | 整合性保持と初期値セットは AFTER トリガで実現 | |
妥当性チェックはステートメント内で処理または INSTEAD OF トリガで実現 |
○ AFTER トリガ
・ | トリガイベント実行後に起動 | |
・ | 1つのトリガイベントに複数の AFTER トリガを設定可 | |
・ | トリガの最初と最後の実行順序を指定可 | |
⇒ | sp_settriggerorder 'トリガ名', '{first|last|none}', 'トリガイベント | |
※ | 設定状況は OBJECTPROPERTY 関数で確認可 |
○ INSTEAD OF トリガ
・ | トリガイベントを実行する代わりに起動 | |
・ | 更新不可能なビューでも更新をサポート | |
← | 複数テーブル結合ビュー等では同時に複数のベーステーブルの更新不可 | |
・ | 1つのトリガイベントに対し1つの INSTEAD OF トリガのみ設定可 | |
・ | 各イベントのステートメントから渡されるデータ値に対して拡張整合性チェックを実行 |