瞭解 DDL 觸發程序與 DML 觸發程序

DDL 觸發程序和 DML 觸發程序各有不同的用途。

DML 觸發程序是在 INSERT、UPDATE 及 DELETE 陳述式上操作,並可協助強制執行商業規則,以及當資料表或檢視中的資料修改時協助擴充資料的完整性。

DDL 觸發程序會在 CREATE、ALTER、DROP 和其他 DDL 陳述式及執行類似 DDL 作業的預存程序上運作。它們是用以執行管理工作並強制執行影響資料庫的商業規則。它們適用於整個資料庫或整個伺服器之單一類型的所有命令。

DML 觸發程序和 DLL 觸發程序是使用類似 Transact-SQL 的語法來建立、修改和卸除,並具有其他類似的行為。

就如同 DML 觸發程序,DDL 觸發程序可執行組件中所封裝的 Managed 程式碼,組件本身是在 Microsoft .NET Framework 中建立並在 SQL Server 中上載。如需詳細資訊,請參閱<設計 CLR 觸發程序的程式>。

就如同 DML 觸發程序,在同一個 Transact-SQL 陳述式中可以建立一個以上的 DDL 觸發程序。此外,DDL 觸發程序以及引發它的陳述式會在相同的交易中執行。交易可以從觸發程序中回復。嚴重的錯誤可能會造成整個交易自動回復。從批次執行且明確包含 ROLLBACK TRANSACTION 陳述式的 DDL 觸發程序將取消整個批次。如需詳細資訊,請參閱<使用包含 COMMIT 或 ROLLBACK TRANSACTION 的 DML 觸發程序>。

[!附註]

發生在 DDL 觸發程序主體內的 ALTER DATABASE 事件將無法回復。

就如同 DML 觸發程序,DDL 觸發程序可以是巢狀的。如需詳細資訊,請參閱<使用巢狀觸發程序>。

當您設計 DLL 觸發程序時,請依照下列方式考慮它們與 DML 觸發程序的不同:

  • DDL 觸發程序只有在完成 Transact-SQL 陳述式後才能執行。DDL 觸發程序不能做為 INSTEAD OF 觸發程序來使用。

  • DDL 觸發程序不會建立 inserteddeleted 資料表。使用 EVENTDATA 函數將可擷取引發 DLL 觸發程序的事件資訊,以及觸發程序所造成的後續變更之資訊。如需詳細資訊,請參閱<使用 EVENTDATA 函數>。

請參閱

概念