了解事件通知与触发器
下表对触发器和事件通知进行了比较。
触发器 |
事件通知 |
---|---|
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.triggers 和 sys.server_triggers 目录视图中找到。 |
有关事件通知的元数据可在 sys.event_notifications 和 sys.server_event_notifications 目录视图中找到。 |