DISABLE TRIGGER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の 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 が、データベース スコープで実行するために作成または変更されたことを示します。

全サーバー
適用対象: SQL Server 2008 (10.0.x) 以降。

DDL トリガーの場合、trigger_name が、サーバー スコープで実行するために作成または変更されたことを示します。 ALL SERVER はログオン トリガーにも適用されます。

Note

このオプションは、包含データベースでは使用できません。

解説

既定では、トリガーは作成されたときに有効になります。 トリガーを無効にしてもトリガーは削除されず、 オブジェクトとして現在のデータベースに残りますが、 トリガーがプログラムされた Transact-SQL ステートメントを実行しても、トリガーは起動しません。 トリガーは ENABLE TRIGGERを使うことで再有効化できます。 テーブル上で定義されたDMLトリガーは、 ALTER TABLEを使うことで無効化または有効化することも可能です。

ALTER TRIGGER文を使ってトリガーを変更するとトリガーが有効になります。

アクセス許可

DML トリガーを無効にするには、少なくともトリガーが作成されたテーブルまたはビューに対する ALTER 権限が必要です。

サーバー スコープ (ON ALL SERVER) 付きの DDL トリガーまたはログオン トリガーを無効にするには、サーバーでの CONTROL SERVER 権限が必要です。 データベーススコープ(ON DATABASE)を持つDDLトリガーを無効にするには、最低限、現在のデータベースでDDLTRIGGERの権限をALTERDATABASE持つ必要があります。

この記事のコード サンプルでは、AdventureWorks2025 または AdventureWorksDW2025 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクト ホーム ページからダウンロードできます。

A. テーブルの DML トリガーを無効にする

次の例では、テーブル uAddress に作成されたトリガー Person を無効にします。

DISABLE TRIGGER Person.uAddress ON Person.Address;  
GO  

B. DDL トリガーを無効にする

次の例では、データベース スコープの DDL トリガー safety を作成し、無効にします。

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 トリガーをすべて無効にします。

DISABLE Trigger ALL ON ALL SERVER;  
GO  

参照

ENABLE TRIGGER (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
DROP TRIGGER (Transact-SQL)
sys.triggers (Transact-SQL)