设计事件通知

更新日期: 2006 年 4 月 14 日

若要设计事件通知,必须确定下列内容:

  • 通知的作用域。
  • 引发事件通知的 Transact-SQL 语句或语句组。

定义通知作用域

您可以将事件通知指定为响应针对当前数据库中或 SQL Server 实例中的所有对象执行的语句。针对 QUEUE_ACTIVATION 和 BROKER_QUEUE_DISABLED 事件指定的事件通知的作用域限定为单个队列。并非所有事件都可以在任何作用域级别执行。例如,CREATE_DATABASE 事件仅可在服务器实例级执行。相反,针对 ALTER_TABLE 事件创建的事件通知可以通过编程,针对数据库中或服务器实例中的所有表执行。

下面的示例将服务器实例中运行的任意 ALTER TABLE 语句的通知发送到 Service Broker 实例的当前数据库中。

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR ALTER_TABLE 
   TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';

下面的“选择特定的 DDL 语句引发事件通知”部分中提供了指向 Transact-SQL 语句以及可以为这些语句指定的作用域的链接。

事件通知不会响应可影响局部或全局临时表以及存储过程的事件。

指定 Transact-SQL 语句或语句组

可以创建事件通知以响应下面的内容:

  • 特定 DDL 语句、SQL 跟踪事件或 Service Broker 事件
  • 预定义的 DDL 语句组或 SQL 跟踪事件组

选择特定的 DDL 语句引发事件通知

事件通知可以设计为在运行特定的 Transact-SQL 语句或存储过程之后执行。如上面的示例中所示,事件通知在 ALTER_TABLE 事件之后执行。

可以与事件通知一起使用的 DDL 语句中提供了可以指定为引发事件通知的各个 Transact-SQL 语句以及可以执行通知的作用域的列表。还可以通过查询 sys.event_notification_event_types 目录视图获取这些事件。

ms175854.note(zh-cn,SQL.90).gif注意:
执行 DDL 式操作的系统存储过程也可以激发事件通知。测试您的事件通知以确定它们是否响应运行的系统存储过程。例如,CREATE TYPE 语句和 sp_addtype 存储过程都将激发针对 CREATE_TYPE 事件创建的事件通知。但是,sp_rename 存储过程不会激发任何事件通知。

选择特定的 SQL 跟踪事件引发事件通知

事件通知可以设计为在 SQL 跟踪事件发生之后激发。例如,下面的事件通知在服务器中出现 Object_Created 事件之后才激发。

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR Object_Created 
   TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;

有关可以引发事件通知的 SQL 跟踪事件的列表,请参阅与事件通知一起使用的跟踪事件。还可以通过查询 sys.event_notification_event_types 目录视图获取这些事件的列表。SQL 跟踪事件仅可在服务器实例作用域级执行。有关 SQL 跟踪事件类的详细信息,请参阅 SQL Server Profiler 参考

选择特定的 Service Broker 事件引发事件通知

事件通知可以设计为在 QUEUE_ACTIVATION 或 BROKER_QUEUE_DISABLED Service Broker 事件之后激发。当队列有消息要处理时,将发生 QUEUE_ACTIVATION 事件。有关详细信息,请参阅Event-Based Activation。当队列状态设置为 OFF 时,将发生 BROKER_QUEUE_DISABLED 事件。有关详细信息,请参阅Handling Poison Messages

选择预定义的 DDL 语句组引发事件通知

事件通知可以在任何属于预定义相似事件组的 Transact-SQL 事件运行之后执行。例如,如果要使事件通知在 CREATE TABLE、ALTER TABLE 或 DROP TABLE 语句执行之后执行,则可以在 CREATE EVENT NOTIFICATION 语句中指定 FOR DDL_TABLE_EVENTS。CREATE EVENT NOTIFICATION 执行之后,事件组包含的事件将添加到 sys.events 目录视图中。

有关可用于事件通知的预定义 DDL 和 DML 语句组、它们所包含的特定语句以及可执行这些事件组的作用域的列表,请参阅用于事件通知的 DDL 事件组

选择预定义的 SQL 跟踪事件组引发事件通知

事件通知可以在任何属于预定义相似跟踪事件组的 SQL 跟踪事件运行之后执行。例如,如果要使事件通知在任何与锁定相关的跟踪事件(包括 LOCK_DEADLOCK、LOCK_DEADLOCK_CHAIN、LOCK_ESCALATION 和 DEADLOCK_GRAPH 事件)之后执行,则可以在 CREATE EVENT NOTIFICATION 语句中指定 FOR TRC_LOCKS。

有关可用于事件通知的预定义 SQL 跟踪事件组的列表,请参阅事件通知使用的跟踪事件组。这些组只能在服务器实例级执行。

请参阅

概念

了解事件通知
实现事件通知

其他资源

EVENTDATA (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2006 年 4 月 14 日

新增内容:
  • 添加了建议测试事件通知以确定它们是否响应执行的存储过程的说明。
  • 添加了对 sys.event_notification_event_types 目录视图的引用。

2005 年 12 月 5 日

已更改的内容:
  • 在“选择特定的 DDL 语句引发事件通知”部分中添加了有关可以在特定存储过程运行之后执行的事件通知的信息。