ENABLE TRIGGER (Transact-SQL)
DML トリガー、DDL トリガー、またはログオン トリガーを有効化します。
構文
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]
引数
schema_name
トリガーが属するスキーマの名前を指定します。 schema_name は、DDL トリガーまたはログオン トリガーに対しては指定できません。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 AdventureWorks2012;
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 AdventureWorks2012;
GO
ENABLE Trigger ALL ON ALL SERVER;
GO