DISABLE TRIGGER (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

停用觸發程序。

Transact-SQL 語法慣例

Syntax

DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }  
ON { object_name | DATABASE | ALL SERVER } [ ; ]  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

schema_name
這是觸發程序所屬的結構描述名稱。 您不能為 DDL 或登入觸發程序指定 schema_name

trigger_name
這是要停用的觸發程序名稱。

ALL
指出只要是在 ON 子句範圍定義的觸發程序一律停用。

警告

SQL Server 會在發行用來進行合併式複寫的資料庫中建立觸發程序。 在已發行的資料庫中指定 ALL,會停用這些觸發程序,這會中斷複寫。 指定 ALL 之前,請先確認未針對合併式複寫發行目前的資料庫。

object_name
為建立 DML 觸發程序 trigger_name 以便在其中執行的資料表或檢視名稱。

DATABASE
如果是 DDL 觸發程序,它會指出已經建立或修改 trigger_name,以在資料庫範圍內執行。

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

如果是 DDL 觸發程序,它會指出已經建立或修改 trigger_name,以在伺服器範圍內執行。 ALL SERVER 也適用於登入觸發程序。

注意

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

備註

根據預設,在建立觸發程序時會一併將它啟用。 即使停用觸發程序,也不會卸除它。 該觸發程序仍然會以物件形式存在於目前的資料庫中。 不過,只要編寫其的任何 Transact-SQL 陳述式在執行時,觸發程序就不會引發。 觸發程序可以使用 ENABLE TRIGGER 重新啟用。 您也可以使用 ALTER TABLE,來停用或啟用資料表上定義的 DML 觸發程序。

當您使用 ALTER TRIGGER 陳述式來變更觸發程序時,會啟用觸發程序。

權限

若要停用 DML 觸發程序,使用者至少要對建立該觸發程序的資料表或檢視,具備 ALTER 權限。

若要停用伺服器範圍 (ON ALL SERVER) 的 DDL 觸發程序或登入觸發程序,使用者必須有伺服器的 CONTROL SERVER 權限。 若要停用以資料庫範圍 (ON DATABASE) 定義的 DDL 觸發程序,使用者至少要在目前資料庫中具備 ALTER ANY DATABASE DDL TRIGGER 權限。

範例

本文需要 AdventureWorks2022 範例資料庫,您可以從 Microsoft SQL Server 範例和社群專案 首頁下載

A. 停用資料表的 DML 觸發程序

下列範例會停用在 uAddress 資料表中建立的觸發程序 Person

DISABLE TRIGGER Person.uAddress ON Person.Address;  
GO  

B. 停用 DDL 觸發程序

下列範例會以資料庫範圍建立 DDL 觸發程序 safety,然後再停用它。

CREATE TRIGGER safety   
ON DATABASE   
FOR DROP_TABLE, ALTER_TABLE   
AS   
   PRINT 'You must disable Trigger "safety" to drop or alter tables!'   
   ROLLBACK;  
GO  
DISABLE TRIGGER safety ON DATABASE;  
GO  

C. 停用所有以相同範圍定義的觸發程序

下列範例會停用在伺服器範圍建立的所有 DDL 觸發程序。

DISABLE Trigger ALL ON ALL SERVER;  
GO  

另請參閱

ENABLE TRIGGER (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
DROP TRIGGER (Transact-SQL)
sys.triggers (Transact-SQL)