次の方法で共有


DISABLE TRIGGER (Transact-SQL)

トリガを無効にします。

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

構文

DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

引数

  • schema_name
    トリガが属するスキーマの名前を指定します。DDL トリガまたはログオン トリガの場合、schema_name は指定できません。

  • 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 AdventureWorks;
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 AdventureWorks;
GO
DISABLE Trigger ALL ON ALL SERVER;
GO