DISABLE TRIGGER (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

停用觸發程序。

Transact-SQL 語法慣例

語法

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

引數

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

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

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

警告

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

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

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

所有伺服器
適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

注意

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

備註

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

透過使用該 ALTER TRIGGER 陳述式改變觸發條件即可啟用該觸發器。

權限

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

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

範例

本文的程式碼範例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025範例資料庫,你可以從 Azure Data SQL 範例庫 GitHub 下載。

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