ENABLE TRIGGER (Transact-SQL)

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

啟用 DML、DDL 或登入觸發程序。

Transact-SQL 語法慣例

Syntax

ENABLE 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 子句範圍內定義的所有觸發程序。

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

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

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

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

注意

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

備註

啟用觸發程序並不會重新建立它。 停用的觸發程序仍然是目前資料庫中的一個物件,但不會引發。 若要啟用觸發程序,可讓其於原先以程式設計方式進行觸發的 Transact-SQL 陳述式在執行時,加以觸發。 您可以使用 DISABLE TRIGGER 停用觸發程序。 您也可以使用 ALTER TABLE,來停用或啟用資料表上定義的 DML 觸發程序。

權限

若要啟用 DML 觸發程序,使用者在建立此觸發程序的資料表或檢視上至少需要有 ALTER 權限。

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

範例

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

下列範例會停用 AdventureWorks 資料庫中由 uAddress 資料表所建立的觸發程序 Address,然後啟用它。

DISABLE TRIGGER Person.uAddress ON Person.Address;  
GO  
ENABLE 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  
ENABLE TRIGGER safety ON DATABASE;  
GO  

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

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

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

ENABLE Trigger ALL ON ALL SERVER;  
GO  

另請參閱

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