DML トリガについて
Microsoft SQL Server 2005 では、ビジネス ルールとデータ整合性を適用するために、制約とトリガという 2 つの主要なしくみが用意されています。トリガは、言語イベントが実行されたときに自動的に有効になる特殊なストアド プロシージャです。SQL Server には、DML トリガと DDL トリガという 2 種類の一般的なトリガがあります。
DDL トリガは SQL Server 2005 で新しく導入されました。このトリガは、サーバーまたはデータベースでデータ定義言語 (DDL) イベントが発生したときに起動されます。DDL トリガの詳細については、「DDL トリガ」を参照してください。
DML トリガは、データベースでデータ操作言語 (DML) イベントが発生したときに起動されます。DML イベントには、指定したテーブルまたはビュー内のデータを変更する INSERT、UPDATE、または DELETE ステートメントなどがあります。DML トリガでは、他のテーブルに対するクエリの実行や、複雑な Transact-SQL ステートメントの使用が可能です。トリガとそのトリガを起動するステートメントは単一のトランザクションとして扱われ、このトランザクションはトリガ内からロールバックできます。ディスクの空き容量の不足などの重大なエラーが検出されると、このトランザクション全体が自動的にロールバックされます。
DML トリガには次の利点があります。
- DML トリガを使用して、データベース内の関連テーブルに変更内容を連鎖させることができます。ただし、このような変更は連鎖参照整合性制約を使用すると、より効率的に行えます。
- DML トリガを使用すると、不適切あるいは悪意のある INSERT、UPDATE、および DELETE 操作から保護できます。また、CHECK 制約を使用して定義された制約よりも複雑な制約を適用することができます。
CHECK 制約とは異なり、DML トリガでは、他のテーブルの列を参照できます。たとえば、トリガでは、他のテーブルに対して SELECT ステートメントを使用して、挿入または更新されたデータと比較したり、データの変更やユーザー定義のエラーメッセージの表示などの追加処理を実行することができます。 - DML トリガを使用して、データの変更前と変更後のテーブルの状態を評価し、その違いに基づいた操作を実行することもできます。
- 1 つのテーブルに同じ種類 (INSERT、UPDATE、または DELETE) の DML トリガを複数作成すると、1 つの変更ステートメントに対して複数の異なる操作を実行できます。
参照
概念
DML トリガの種類
トリガと制約の比較
AdventureWorks サンプル データベースの DML トリガ