分享方式:


DROP TRIGGER (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

從目前資料庫中移除一個或多個 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  

引數

IF EXISTS
適用於:SQL Server (SQL Server 2016 (13.x) 至最新版本、SQL Database)。

只有在觸發程序已存在時,才能有條件地將其卸除。

schema_name
這是 DML 觸發程序所屬的結構描述名稱。 DML 觸發程序只會針對其據以建立的資料表或檢視表的結構描述。 您不能為 DDL 或登入觸發程序指定 schema_name

trigger_name
這是要移除之觸發程序的名稱。 如需查看目前建立的觸發程序清單,請使用 sys.server_assembly_modulessys.server_triggers

DATABASE
指出將 DDL 觸發程序範圍套用在目前資料庫上。 如果建立或修改觸發程序時也指定了 DATABASE,就必須指定 DATABASE。

ALL SERVER
適用於:SQL Server 2008 (10.0.x) 及更新版本。

指出將 DDL 觸發程序的範圍套用到目前伺服器。 如果建立或修改觸發程序時也指定了 ALL SERVER,就必須指定 ALL SERVER。 ALL SERVER 也適用於登入觸發程序。

注意

自主資料庫無法使用這個選項。

備註

您可以卸除 DML 觸發程序,或卸除觸發程序資料表,來移除 DML 觸發程序。 當卸除資料表時,也會卸除所有相關聯的觸發程序。

當卸除觸發程序時,會從 sys.objectssys.triggerssys.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 卸除 AdventureWorks2022 資料庫中的觸發程式。 (自 SQL Server 2016 (13.x) 起,您可以使用 DROP INDEX 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)