DROP TRIGGER (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
1 つ以上の DML トリガーまたは DDL トリガーを現在のデータベースから削除します。
構文
-- 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
引数
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.objects、sys.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)