代码之家  ›  专栏  ›  技术社区  ›  Xedni

查询通知内部

  •  0
  • Xedni  · 技术社区  · 6 年前

    我正在研究使用 Query Notifications 作为识别表中数据何时更改的轻量级(ER)方法。我知道他们使用ServiceBroker,而且(尽管我很难确切解释原因),他们看起来确实比CDC或触发器更可取。

    通过向数据库提供查询来设置查询通知,该查询将发送通知“ ...when the results of [the provided] query change “。

    对我来说,听起来他们是在说,无论你提出什么样的问题,都会被反复询问。我想我可能误解了SQL在用那个查询监控所说的更改时在封面下的具体操作,但是我在网上找不到任何有关实际发生的事情。我希望它类似于解析查询并在查询中引用的任何对象上设置超级杜珀轻量级的“触发器”,但由于我不知道,它使我对想要使用该功能保持沉默。

    是否有人足够熟悉ServiceBroker和查询通知功能,以解释数据库引擎如何监视所提供查询中的更改?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Remus Rusanu    6 年前

    基于与物化(索引)视图相同的技术。当您为查询“选择…从…其中“引擎使用相同的查询设置一个伪索引视图。无论何时运行任何DML,执行计划都必须维护“假”索引视图数据并相应地生成计划。当(如果)DML执行实际上试图更新伪索引视图中的一行时,这是原始查询很可能更改了结果并触发通知的标志。然后删除“假”索引视图。也就是说,“假”索引视图永远不会具体化(不存在实际的行)。

    这就是为什么查询可以订阅QN的限制与索引视图限制几乎相同的原因。

    马丁所链接的文章也解释了这一点,但将此作为未来参考文献的答案。