次の方法で共有


DDL トリガと DML トリガについて

DDL トリガと DML トリガでは用途が異なります。

DML トリガは、INSERT、UPDATE、および DELETE ステートメントを操作し、ビジネス ルールを適用したり、テーブルやビューでデータが変更された場合にデータ整合性を拡張するために使用します。

DDL トリガは、CREATE、ALTER、DROP、その他の DDL ステートメント、および DDL に類似した処理を実行するシステム ストアド プロシージャを操作します。DDL トリガを使用して、管理タスクを実行したり、データベースに影響を与えるビジネス ルールを適用します。DDL トリガは、1 つのデータベースやサーバー全体にわたり、特定の種類のすべてのコマンドに適用されます。

DML トリガと DDL トリガの作成、変更、または削除には、類似した Transact-SQL 構文を使用します。また、これらの 2 つのトリガの動作には他の類似点もあります。

DML トリガと同様に、DDL トリガを使用して、Microsoft.NET Framework で作成され、SQL Server にアップロードされた、アセンブリとしてパッケージ化されたマネージ コードを実行できます。詳細については、「CLR トリガのプログラミング」を参照してください。

DML トリガと同様に、複数の DDL トリガを 1 つの Transact-SQL ステートメントで作成できます。また、DDL トリガとこのトリガを起動するステートメントは、同じトランザクション内で実行されます。このトランザクションは、DDL トリガ内からロールバックできます。重大なエラーが発生した場合には、トランザクション全体が自動的にロールバックされることがあります。バッチから実行している DDL トリガに ROLLBACK TRANSACTION ステートメントが明示的に含まれていると、バッチ全体がキャンセルされます。詳細については、「COMMIT TRANSACTION または ROLLBACK TRANSACTION を含む DML トリガの使用」を参照してください。

注意注意

DDL トリガの本文内で行われた ALTER DATABASE イベントはロールバックできません。

DML トリガと同様に、DDL トリガは入れ子にできます。詳細については、「入れ子になったトリガの使用」を参照してください。

DDL トリガをデザインする場合は、次に示す DML トリガとの相違点を考慮してください。

  • DDL トリガは、Transact-SQL ステートメントが完了するまで実行されません。DDL トリガを INSTEAD OF トリガの代わりに使用することはできません。

  • DDL トリガでは、inserted テーブルや deleted テーブルは作成できません。DDL トリガを起動するイベントの情報と、起動したトリガにより加えられる変更は、EVENTDATA 関数を使用してキャプチャします。詳細については、「EVENTDATA 関数の使用」を参照してください。

関連項目

概念