了解 DDL 触发器

更新日期: 2006 年 4 月 14 日

像常规触发器一样,DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 UPDATE、INSERT 或 DELETE 语句而激发。相反,它们将为了响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。

ms175941.note(zh-cn,SQL.90).gif重要提示:
测试您的 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 ;

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

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

请参阅

概念

了解 DDL 触发器与 DML 触发器
实现 DDL 触发器

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 4 月 14 日

新增内容:
  • 添加了一项建议测试 DDL 触发器以确定它们是否响应执行的系统存储过程的重要说明。