DDL トリガについて

更新 : 2006 年 4 月 14 日

DDL トリガは標準的なトリガと同様、イベントに応じてストアド プロシージャを起動します。ただし、DML トリガとは異なり、テーブルまたはビューに対する UPDATE、INSERT、DELETE の各ステートメントに呼応して起動されることはありません。その代わりに、さまざまなデータ定義言語 (DDL) イベントに呼応して起動されます。これらのイベントは、主にキーワード CREATE、ALTER、および DROP で始まる Transact-SQL ステートメントに対応します。DDL と同様の操作を実行する特定のシステム ストアド プロシージャも DDL トリガを起動できます。

ms175941.note(ja-jp,SQL.90).gif重要 :
DDL トリガはテストして、実行されているシステム ストアド プロシージャに応答するかどうか、確認してください。たとえば、CREATE TYPE ステートメントおよび sp_addtype ストアド プロシージャはどちらも、CREATE_TYPE イベントで作成される DDL トリガを起動します。ただし、sp_rename ストアド プロシージャは、どの DDL トリガも起動しません。

DDL トリガは、データベース操作の監査や管理などの管理タスクに使用できます。

DDL トリガは、次のような場合に使用します。

  • データベース スキーマへの特定の変更を回避したい場合。
  • データベース スキーマの変更に対して、データベース内で何らかの処理を実行する場合。
  • データベース スキーマの変更またはイベントを記録する場合。

DDL トリガは、起動元の DDL ステートメントが実行されるまで、起動されません。DDL トリガを INSTEAD OF トリガとして使用することはできません。

次の例では、DDL トリガを使用して、データベース内のテーブルの変更または削除を回避する方法を示します。

CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK ;

DDL トリガは、現在のデータベースまたは現在のサーバーで処理されている Transact-SQL イベントに応答して起動されます。トリガのスコープは、イベントによって異なります。DDL トリガのスコープの詳細については、「DDL トリガの設計」を参照してください。

AdventureWorks サンプル データベースで使用できる DLL トリガの例を入手するには、SQL Server Management Studio のオブジェクト エクスプローラで、AdventureWorks データベースの [プログラミング] フォルダにある [データベース トリガ] フォルダを開きます。[ddlDatabaseTriggerLog] を右クリックし、[名前を付けてデータベース トリガをスクリプト化] をクリックします。既定では、DDL トリガ ddlDatabaseTriggerLog は無効になっています。

参照

概念

DDL トリガと DML トリガについて
DDL トリガの実装

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

新しい内容 :
  • DDL トリガをテストして、実行されているシステム ストアド プロシージャに応答するかどうかの確認を行うことを推奨する重要な注を追加しました。