DROP TRIGGER (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
DROP TRIGGER [schema_name.]trigger_name [ ,...n ] [ ; ]

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger)
DROP TRIGGER trigger_name [ ,...n ] 
ON { DATABASE | ALL SERVER } 
[ ; ]

Trigger on a LOGON event (Logon Trigger)
DROP TRIGGER trigger_name [ ,...n ] 
ON ALL SERVER 

引数

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

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

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

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

説明

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 トリガを削除する

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

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

B. DDL トリガを削除する

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

重要な注意事項重要

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

USE AdventureWorks;
GO

IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;
GO