了解事件通知与触发器

下表对触发器和事件通知进行了比较。

触发器

事件通知

DML 触发器响应数据操作语言 (DML) 事件。DDL 触发器响应数据定义语言 (DDL) 事件。

事件通知响应 DDL 事件和部分 SQL 跟踪事件。

触发器可以运行 Transact-SQL 或公共语言运行时 (CLR) 托管代码。

事件通知不运行代码,而是向 Service Broker 服务发送 xml 消息。

触发器在导致其激发的事务的作用域内同步处理。

事件通知可以异步处理,并且不在导致其激发的事务的作用域内运行。

触发器的使用者与导致触发器激发的事件紧密结合。

事件通知的使用者与导致事件通知激发的事件相分离。

触发器必须在本地服务器上处理。

事件通知可以在远程服务器上处理。

触发器可以回滚。

事件通知不能回滚。

DML 触发器名称的作用域是架构。DDL 触发器名称是数据库范围或服务器范围的。

事件通知的名称由服务器或数据库限定范围。QUEUE_ACTIVATION 事件的事件通知限定于一个特定的队列。

DML 触发器与其应用的表属于相同的所有者。

队列上的事件通知的所有者可以与所应用对象的所有者不同。

触发器支持 EXECUTE AS 子句。

事件通知不支持 EXECUTE AS 子句。

可以使用 EVENTDATA 函数(返回 xml 数据类型)捕获 DDL 触发器事件信息。

事件通知向 Service Broker 服务发送 xml 事件信息。该信息被格式化为与 EVENTDATA 函数的架构相同的架构。

有关触发器的元数据可在 sys.triggerssys.server_triggers 目录视图中找到。

有关事件通知的元数据可在 sys.event_notificationssys.server_event_notifications 目录视图中找到。

请参阅

概念