使用SqlDependency监测SQL Server 2005/2008字段改动时的SQL语法及相关注意事项

 

【本文引自MSDN】

使用查询通知功能的应用程序需要考虑下列特殊注意事项。

有效查询

查询通知只支持某些 Transact-SQL 语句。

首先,要支持通知,查询中不得包含下列内容:

  • 派生的表。

  • 行集函数。

  • UNION 运算符。

  • 子查询。

  • 外联接或自联接。

  • TOP 子句。

  • DISTINCT 关键字。

  • COUNT(*) 聚合函数。

  • AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP 聚合函数。

  • 用户定义的聚合函数。

  • 引用可空表达式的 SUM 函数。

  • 完全文本谓词 CONTAINS 或 FREETEXT。

  • COMPUTE 或 COMPUTE BY 子句。

  • 聚合表达式(如果在选择列表中未指定 GROUP BY)。如果指定了 GROUP BY,选择列表中必须包含 COUNT_BIG(*) 表达式,并且不能指定 HAVING、CUBE 或 ROLLUP。

  • INTO 子句。

  • 将阻止结果更改的条件(例如 WHERE 1=0)。

  • FOR BROWSE(或在 SET NO_BROWSETABLE ON 的情况下运行)。

  • READPAST 锁定提示。

其次,查询不得引用下列内容:

  • 临时表或表变量。

  • 其他数据库或服务器中的表或视图。

  • 所有其他视图或表值函数。

  • 任何系统表或视图。

  • 任何非确定性函数,包括评级和窗口函数。

  • 任何服务器全局变量

  • 任何服务中介程序队列。

  • 同义词。

最后,查询必须引用基表或视图。

快速更新

使 用查询通知的应用程序必须考虑马上会出现通知的情况。服务器上的数据更改时,通知消息将发送到相应的服务中介程序队列。应用程序需要注册才能接收其他通 知。因此,如果多个应用程序快速更新某个数据集,应用程序在缓存刷新后,立即可以接收通知,检索数据,然后获取另一个更新通知。编写使用查询通知的应用程 序必须考虑此情况。如果应用程序使用不断更新的数据,可能更适合另一种数据缓存策略。

事务

如果使用已注册的通知请求对数据集进行了多处修改,并且这些更改在事务内进行,则只会发送单个通知事件。

SQL Server 的服务帐户

对于使用本地系统帐户作为服务帐户的 SQL Server 实例,应用程序不会从其接收通知。

你可能感兴趣的:(sql,sql,数据库,server,服务器)