次の方法で共有


ENABLE TRIGGER (Transact-SQL)

DML トリガ、DDL トリガ、またはログオン トリガを有効化します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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