瞭解 DDL 觸發程序
更新: 2006 年 4 月 14 日
DDL 觸發程序和一般觸發程序一樣,會引發預存程序以回應事件。但和 DML 觸發程序不同的是,DDL 觸發程序不會引發預存程序以回應資料表或檢視上的 UPDATE、INSERT 或 DELETE 陳述式,而會回應許多資料定義語言 (DDL) 事件。這些事件主要對應至以 CREATE、ALTER 和 DROP 關鍵字開頭的 Transact-SQL 陳述式。執行類似 DDL 作業的某些系統預存程序也可能引發 DDL 觸發程序。
![]() |
---|
請測試 DDL 觸發程序,以判斷它們對執行之系統預存程序的回應。例如,CREATE TYPE 陳述式與 sp_addtype 預存程序,都會引發在 CREATE_TYPE 事件上建立的 DDL 觸發程序。不過,sp_rename 預存程序不會引發任何 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 觸發程序>。
若要取得 AdventureWorks 範例資料庫中的 DDL 觸發程序範例,請在 SQL Server Management Studio 的 [物件總管] 中,開啟位於 AdventureWorks 資料庫之 [可程式性] 資料夾中的 [資料庫觸發程序] 資料夾。以滑鼠右鍵按一下 [ddlDatabaseTriggerLog],然後選取 [編寫資料庫觸發程序的指令碼為]。依預設,會停用 DDL 觸發程序 ddlDatabaseTriggerLog。
請參閱
概念
瞭解 DDL 觸發程序與 DML 觸發程序
實作 DDL 觸發程序
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|