DML トリガについて

Microsoft SQL Server では、ビジネス ルールとデータ整合性を適用するために、制約とトリガという 2 つの主要なしくみが用意されています。トリガとは、言語イベントの実行時に自動的に実行される、特殊なストアド プロシージャです。SQL Server には、DML トリガ、DDL トリガ、ログオン トリガという 3 種類の一般的なトリガがあります。

DDL トリガは、サーバーまたはデータベースでデータ定義言語 (DDL) イベントが発生したときに起動されます。DDL トリガの詳細については、「DDL トリガ」を参照してください。ログオン トリガは、LOGON イベントに応答してストアド プロシージャを起動します。このイベントは、SQL Server インスタンスでユーザー セッションが確立されるときに発生します。詳細については、「ログオン トリガー」を参照してください。

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 つの変更ステートメントに対して複数の異なる操作を実行できます。