DISABLE TRIGGER (Transact-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 已經建立或修改,以資料庫範圍執行。

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

    [!附註]

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

備註

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

權限

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

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

範例

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

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

USE AdventureWorks2012;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO

B.停用 DDL 觸發程序

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

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

USE AdventureWorks2012;
GO
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)