ENABLE TRIGGER (Transact-SQL)
DML トリガ、DDL トリガ、またはログオン トリガを有効化します。
構文
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]
引数
schema_name
トリガが属するスキーマの名前を指定します。DDL トリガまたはログオン トリガの場合、schema_name は指定できません。trigger_name
有効化するトリガの名前です。ALL
ON 句のスコープで定義されたすべてのトリガを有効化することを示します。object_name
DML トリガ trigger_name が実行用に作成されたテーブルまたはビューの名前を指定します。DATABASE
DDL トリガの場合、trigger_name が、データベース スコープで実行するために作成または変更されたことを示します。ALL SERVER
DDL トリガの場合は、trigger_name が、サーバー スコープで実行するために作成または変更されたことを示します。ALL SERVER はログオン トリガにも適用されます。
説明
トリガを有効化しても、トリガが再作成されるわけではありません。無効化されたトリガは、引き続き現在のデータベースのオブジェクトとして残りますが、起動されることはありません。トリガを有効化すると、そのトリガがプログラムされている Transact-SQL ステートメントが実行されたときに起動されます。トリガを無効化するには、DISABLE TRIGGER を使用します。テーブルに定義された DML トリガも、ALTER TABLE を使用して無効または有効にできます。
権限
DML トリガを有効化するには、少なくとも、そのトリガが作成されたテーブルまたはビューに対する ALTER 権限が必要です。
サーバー スコープ (ON ALL SERVER) 付きの DDL トリガまたはログオン トリガを有効化するには、サーバーでの CONTROL SERVER 権限が必要です。DDL トリガをデータベース スコープ (ON DATABASE) で有効化するには、少なくとも、現在のデータベースでの ALTER ANY DATABASE DDL TRIGGER 権限が必要です。
例
A. テーブル上の DML トリガを有効化する
次の例では、テーブル Address 上に作成されたトリガ uAddress を無効化し、次に有効化します。
USE AdventureWorks;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO
ENABLE Trigger Person.uAddress ON Person.Address;
GO
B. DDL トリガを有効化する
次の例では、DDL トリガ safety をデータベース スコープで作成し、次に無効化します。
IF EXISTS (SELECT * FROM sys.triggers
WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety ON DATABASE;
GO
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO
ENABLE TRIGGER safety ON DATABASE;
GO
C. 同じスコープで定義されたすべてのトリガを有効化する
次の例では、サーバー スコープで作成されたすべての DDL トリガを有効化します。
USE AdventureWorks;
GO
ENABLE Trigger ALL ON ALL SERVER;
GO