瞭解 DDL 觸發程序

DDL 觸發程序和一般觸發程序一樣,會引發預存程序以回應事件。但和 DML 觸發程序不同的是,DDL 觸發程序不會引發預存程序以回應資料表或檢視上的 UPDATE、INSERT 或 DELETE 陳述式,而會回應許多資料定義語言 (DDL) 事件。這些事件主要對應至以 CREATE、ALTER 和 DROP 關鍵字開頭的 Transact-SQL 陳述式。執行類似 DDL 作業的某些系統預存程序也可能引發 DDL 觸發程序。

重要事項重要事項

請測試 DDL 觸發程序,以判斷它們對執行之系統預存程序的回應。例如,CREATE TYPE 陳述式與 sp_addtype 預存程序,都會引發在 CREATE_TYPE 事件上建立的 DDL 觸發程序。.

DDL 觸發程序可用於稽核和控管資料庫作業等管理工作。

當您要執行下列作業時,可使用 DDL 觸發程序:

  • 要防止資料庫結構描述的特定變更。

  • 為回應資料庫結構描述的變更,希望資料庫中發生特定動作時。

  • 要記錄資料庫結構描述中的變更或事件時。

在執行會觸發 DDL 觸發程序的 DDL 陳述式之後,才會引發 DDL 觸發程序。DDL 觸發程序不可作為 INSTEAD OF 觸發程序使用。

下列範例顯示如何使用 DDL 觸發程序來防止資料庫中的任何資料表被修改或卸除。

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

對於目前資料庫或目前伺服器所處理的 Transact-SQL 事件,可以引發 DDL 觸發程序以回應它。觸發程序的範圍取決於事件。如需有關 DDL 觸發程序範圍的詳細資訊,請參閱<設計 DDL 觸發程序>。

若要取得 AdventureWorks2008R2 範例資料庫中的 DDL 觸發程序範例,請在 SQL Server Management Studio 的 [物件總管] 中,開啟位於 AdventureWorks2008R2 資料庫之 [可程式性] 資料夾中的 [資料庫觸發程序] 資料夾。以滑鼠右鍵按一下 [ddlDatabaseTriggerLog],然後選取 [編寫資料庫觸發程序的指令碼為]。依預設,會停用 DDL 觸發程序 ddlDatabaseTriggerLog