DROP TRIGGER (Transact-SQL)

從目前資料庫中移除一個或多個 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 觸發程序的範圍是建立其資料表或檢視的結構描述。DDL 或登入觸發程序無法指定 schema_name。

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

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

  • ALL SERVER
    指出將 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 觸發程序。

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;
GO