Share via


ENABLE TRIGGER (Transact-SQL)

更新: 2006 年 12 月 12 日

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

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • schema_name
    這是觸發程序所屬的結構描述名稱。DDL 或登入觸發程序無法指定 schema_name
  • trigger_name
    這是您要啟用的觸發程序名稱。
  • ALL
    指出啟用在 ON 子句範圍內定義的所有觸發程序。
  • object_name
    這是建立 DML 觸發程序 trigger_name 加以執行的資料表或檢視名稱。
  • DATABASE
    如果是 DDL 觸發程序,它會指出 trigger_name 已經建立或修改,以資料庫範圍執行。
  • ALL SERVER
    如果是 DDL 或登入觸發程序,它會指出 trigger_name 已經建立或修改,以伺服器範圍執行。

備註

啟用觸發程序並不會重新建立它。停用的觸發程序仍然是目前資料庫中的一個物件,但不會引發。啟用觸發程序後,原先設定之任何事件執行時,便造成觸發程序引發。您可以使用 DISABLE 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 AdventureWorks;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO
ENABLE 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
ENABLE TRIGGER safety ON DATABASE;
GO

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

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

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

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 在整個主題內新增登入觸發程序的相關資訊,登入觸發程序是 SQL Server 2005 Service Pack 2 加入的新功能。