DROP TRIGGER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

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  

引数

存在する場合
適用対象: 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 トリガーの作成または変更時に指定されていた場合は、指定しなければなりません。

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

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

Note

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

解説

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

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

すべてのトリガーが同一のON節で作成された場合にのみ、1つの 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のDDLTRIGGER権限DATABASEALTERが必要です。

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

以下の例は、AdventureWorks2025データベースに employee_insupd トリガーを落としています。 (2016 SQL Server(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)
イベントデータ (Transact-SQL)
DML トリガーに関する情報の取得
sp_help(Transact-SQL)
sp_helptrigger(Transact-SQL)
sys.triggers (Transact-SQL)
システムトリガーイベント (Transact-SQL)
sys.sql_modules(Transact-SQL)
sys.assembly_modules(Transact-SQL)
サーバートリガー (sys.server_triggersTransact-SQL)
sys.server_trigger_events (Transact-SQL) サーバートリガーイベント
sys.server_sql_modules(Transact-SQL)
sys.server_assembly_modules(Transact-SQL)