查询通知消息

查询通知消息包含 XML。每个消息都包括创建该消息的原因和创建通知时包括的通知消息。

QueryNotification 元素上的属性标识消息的原因,而 Message 元素包含订阅的通知 ID。例如,以下所显示的 XML 文档是完整的查询通知消息(为确保可读性重新格式化了该文档):

<qn:QueryNotification
  xmlns:qn="https://schemas.microsoft.com/SQL/Notifications/QueryNotification"
  Type="change" Source="data" Info="insert">
    <qn:Message>http://mysite.microsoft.com/catalog.aspx?Category=Cars</qn:Message>
</qn:QueryNotification>

此查询通知消息报告了 INSERT 语句使用消息“http://mysite.microsoft.com/catalog.aspx?Category=Cars”更改了订阅的数据。

注意注意

由于该通知是被作为 XML 文档传递的,因此数据库引擎将转义在 XML 文档中无效的字符。例如,如果与订阅一起提交的消息包含字符 <,则返回的 XML 会将此字符转义为 &lt;。

下表列出了每个属性的值。SQL Server 只生成某些属性组合。例如,由于 changeType 要求创建订阅,因此,changeType 不能与 statementSource 组合。

根据 Type 属性的值进行区分,查询通知消息可分为两个主要类型。若要指明查询的结果已经更改,数据库引擎将创建 change 类型的消息。若要指明订阅请求失败,数据库引擎将创建 subscribe 类型的消息。另两个属性的值将指明 SQL Server 创建消息的确切原因。

更改消息

当进行可能影响查询结果的更改时,SQL Server 将生成 change 类型的消息。下表说明了更改消息:

来源

信息

说明

数据

截断

查询中引用的一个或多个表被截断。

数据

插入

SQL Server 已对查询中引用的一个或多个表应用了 INSERT 语句。

数据

更新

SQL Server 已对查询中引用的一个或多个表应用了 UPDATE 语句。

数据

删除

SQL Server 已对查询中引用的一个或多个表应用了 DELETE 语句。

超时

订阅超时时间已到。

对象

删除

该查询所使用的基本对象之一已被删除。

对象

更改

该查询所使用的基本对象之一已被修改。

系统

重新启动

启动了 SQL Server。

系统

错误

在 SQL Server 中发生了内部错误。

系统

资源

由于 SQL Server 的状态(例如负荷很重的服务器),删除了通知订阅。

订阅消息

当 SQL Server 不能创建订阅时,服务器将立即生成 subscribe 类型的消息。下表说明了 subscribe 消息。

来源

信息

说明

语句

查询

已提交的命令包含不能满足查询通知要求的 SELECT 语句。

语句

无效

已提交命令包含不支持通知的语句(例如 INSERT 或 UPDATE)。

语句

以前的无效

在事务中的以前的命令包含不支持通知的语句(例如 INSERT 或 UPDATE)

语句

设置选项

提交命令时,没有适当地设置连接选项。

语句

隔离

隔离级别对于查询通知无效(SNAPSHOT 隔离级别)。

语句

查询模板限制

查询中指定的表已经达到内部模板的最大数目。

请参阅

概念