DROP TRIGGER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

1 つ以上の DML トリガーまたは DDL トリガーを現在のデータベースから削除します。

Transact-SQL 構文表記規則

構文

-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)  
  
DROP TRIGGER [ IF EXISTS ] [schema_name.]trigger_name [ ,...n ] [ ; ]  
  
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger)  
  
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]   
ON { DATABASE | ALL SERVER }   
[ ; ]  
  
-- Trigger on a LOGON event (Logon Trigger)  
  
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]   
ON ALL SERVER  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

IF EXISTS
適用対象: SQL Server (SQL Server 2016 (13.x) から現在のバージョンまで、SQL Database)。

条件付きでは既に存在する場合にのみ、トリガーを削除します。

schema_name
DML トリガーが属しているスキーマの名前を指定します。 DML トリガーのスコープは、そのトリガーが作成されたテーブルまたはビューのスキーマです。 DDL トリガーまたはログオン トリガーでは schema_name を指定できません。

trigger_name
削除するトリガーの名前を指定します。 現在作成されているトリガーの一覧を表示するには、sys.server_assembly_modules または sys.server_triggers を使います。

DATABASE
DDL トリガーのスコープが現在のデータベースに適用されることを示します。 トリガーを作成または変更したときに DATABASE を指定した場合は、同じく DATABASE を指定する必要があります。

ALL SERVER
適用対象: SQL Server 2008 (10.0.x) 以降。

DDL トリガーのスコープが現在のサーバーに適用されることを示します。 トリガーを作成または変更したときに ALL SERVER を指定した場合は、同じく ALL SERVER を指定する必要があります。 ALL SERVER はログオン トリガーにも適用されます。

Note

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

解説

DML トリガーを削除するには、DML トリガー自体またはトリガー テーブルを削除します。 テーブルを削除した場合、関係付けられているすべてのトリガーも削除されます。

トリガーが削除されると、トリガーに関する情報が sys.objectssys.triggers、および sys.sql_modules カタログ ビューから削除されます。

すべてのトリガーが同一の ON 句で作成されている場合のみ、DROP TRIGGER ステートメントごとに複数の DDL トリガーを削除できます。

トリガーの名前を変更するには、DROP TRIGGER と CREATE TRIGGER を使用します。 トリガーの定義を変更するには、ALTER TRIGGER を使用します。

特定のトリガーの依存関係を確認する方法について詳しくは、「sys.sql_expression_dependencies」、「sys.dm_sql_referenced_entities (Transact-SQL)」、「sys.dm_sql_referencing_entities (Transact-SQL)」をご覧ください。

トリガーのテキストの表示について詳しくは、「sp_helptext (Transact-SQL)」と「sys.sql_modules (Transact-SQL)」をご覧ください。

既存トリガーのリストの表示について詳しくは、「sys.triggers (Transact-SQL)」と「sys.server_triggers (Transact-SQL)」をご覧ください。

アクセス許可

DML トリガーを削除するには、トリガーが定義されているテーブルやビューに対する ALTER 権限が必要です。

サーバー スコープ (ON ALL SERVER) で定義されている DDL トリガー、またはログオン トリガーを削除するには、サーバーでの CONTROL SERVER 権限が必要です。 データベース スコープ (ON DATABASE) で定義されている DDL トリガーを削除するには、現在のデータベースでの ALTER ANY DATABASE DDL TRIGGER 権限が必要です。

A. DML トリガーを削除する

次の例では、AdventureWorks2022 データベースの employee_insupd トリガーを削除します。 (SQL Server 2016 (13.x) 以降で、DROP TRIGGER IF EXISTS 構文を使用することができます。)

IF OBJECT_ID ('employee_insupd', 'TR') IS NOT NULL  
   DROP TRIGGER employee_insupd;  

B. DDL トリガーを削除する

次の例では、DDL トリガー safety を削除します。

重要

DDL トリガーはスキーマ スコープではないため、sys.objects カタログ ビューには表示されません。そのため、それらのトリガーがデータベース内に存在するかどうかを、OBJECT_ID 関数を使用してクエリすることはできません。 スキーマ スコープでないオブジェクトをクエリするには、適切なカタログ ビューを使用する必要があります。 DDL トリガーの場合は、sys.triggers を使ってください。

DROP TRIGGER safety  
ON DATABASE;  

関連項目

ALTER TRIGGER (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
EVENTDATA (Transact-SQL)
DML トリガーに関する情報の取得
sp_help (Transact-SQL)
sp_helptrigger (Transact-SQL)
sys.triggers (Transact-SQL)
sys.trigger_events (Transact-SQL)
sys.sql_modules (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.server_triggers (Transact-SQL)
sys.server_trigger_events (Transact-SQL)
sys.server_sql_modules (Transact-SQL)
sys.server_assembly_modules (Transact-SQL)