DROP TRIGGER (Transact-SQL)
從目前資料庫中移除一個或多個 DML 或 DDL 觸發程序。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。 |
語法
-- SQL Server Syntax
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
-- Windows Azure SQL Database Syntax
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 }
[ ; ]
引數
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 至 SQL Server 2014。
指出將 DDL 觸發程序的範圍套用到目前伺服器。 如果建立或修改觸發程序時也指定了 ALL SERVER,就必須指定 ALL SERVER。 ALL SERVER 也適用於登入觸發程序。
注意
自主資料庫無法使用這個選項。
備註
您可以卸除 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 觸發程序
下列範例會卸除 AdventureWorks2012 資料庫中的 employee_insupd 觸發程序。
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。 |
IF EXISTS (SELECT * FROM sys.triggers
WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;
請參閱
參考
DISABLE TRIGGER (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)