DISABLE TRIGGER (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

トリガーを無効にします。

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
適用対象: 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 トリガーを無効にするために、ユーザーには少なくとも、現在のデータベースに対する ALTER ANY DATABASE DDL TRIGGER 権限が必要です。

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

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

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

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)