DISABLE TRIGGER (Transact-SQL)
トリガーを無効にします。
構文
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]
引数
schema_name
トリガーが属するスキーマの名前を指定します。 schema_name は、DDL トリガーまたはログオン トリガーに対しては指定できません。trigger_name
無効にするトリガーの名前を指定します。ALL
ON 句の有効範囲で定義されたすべてのトリガーを無効にすることを示します。注意 SQL Server では、マージ レプリケーション用にパブリッシュされたデータベースにトリガーが作成されます。 パブリッシュされたデータベースで ALL を指定すると、これらのトリガーが無効になり、レプリケーションが中断されます。 現在のデータベースがマージ レプリケーション用にパブリッシュされていないことを確認してから、ALL を指定してください。
object_name
DML トリガー trigger_name が実行用に作成されたテーブルまたはビューの名前を指定します。DATABASE
DDL トリガーの場合、trigger_name が、データベース スコープで実行するために作成または変更されたことを示します。ALL SERVER
DDL トリガーの場合は、trigger_name が、サーバー スコープで実行するために作成または変更されたことを示します。 ALL SERVER はログオン トリガーにも適用されます。注 このオプションは、包含データベースでは使用できません。
説明
既定では、トリガーは作成されたときに有効になります。 トリガーを無効にしてもトリガーは削除されず、 オブジェクトとして現在のデータベースに残りますが、 トリガーがプログラムされた Transact-SQL ステートメントを実行しても、トリガーは起動しません。 トリガーは、ENABLE TRIGGER を使用することにより再度有効にできます。 テーブルに定義された DML トリガーも、ALTER TABLE を使用して無効または有効にできます。
権限
DML トリガーを無効にするには、少なくともトリガーが作成されたテーブルまたはビューに対する ALTER 権限が必要です。
サーバー スコープ (ON ALL SERVER) 付きの DDL トリガーまたはログオン トリガーを無効化するには、サーバーでの CONTROL SERVER 権限が必要です。 データベース スコープ (ON DATABASE) の DDL トリガーを無効にするには、現在のデータベースに対する ALTER ANY DATABASE DDL TRIGGER 権限が必要です。
使用例
A. テーブルの DML トリガーを無効にする
次の例では、テーブル Address に作成されたトリガー uAddress を無効にします。
USE AdventureWorks2012;
GO
DISABLE 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
C. 同じスコープに定義されたすべてのトリガーを無効にする
次の例では、サーバー スコープで作成されたすべての DDL トリガーを無効化します。
USE AdventureWorks2012;
GO
DISABLE Trigger ALL ON ALL SERVER;
GO