了解 DDL 触发器

像常规触发器一样,DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 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 ;

可以激发 DDL 触发器以响应在当前数据库或当前服务器中处理的 Transact-SQL 事件。触发器的作用域取决于事件。有关 DDL 触发器作用域的详细信息,请参阅设计 DDL 触发器

若要获取 AdventureWorks 示例数据库中提供的 DDL 触发器示例,请在 SQL Server Management Studio 的对象资源管理器中打开位于 AdventureWorks 数据库的“可编程性”文件夹中的 Database Triggers 文件夹。右键单击 ddlDatabaseTriggerLog 并选择**“编写数据库触发器脚本为”**。默认情况下,DDL 触发器 ddlDatabaseTriggerLog 处于禁用状态。