用于监视DML更改的SQL Server Service Broker

时间:2016-08-15 14:25:39

标签: c# sql-server service-broker

我想做什么:

  • 通过C#外部应用程序监听X表上的数据库插入/更新语句

  • 在每次插入/更新时,我都希望收到通知

  • 通知之后
  • 我想要检索插入/更新的行

我如何接近这个:

  • 为每个表创建一个DML触发器,在每次插入/更新后更新服务代理队列

  • 在此之后,我对这种方法并不完全清楚。主要是,如何从服务代理队列接收通知?

根据我的理解,SqlDependency需要一个可以检测到更改的查询。因此,我是否针对目标队列指定查询?

由于

1 个答案:

答案 0 :(得分:0)

SqlDependency是一种抽象,恰好使用Service Broker来传递通知。在这种情况下,我认为你可以忽略它(它是SqlDependency)

我实际上已经实现了一个类似的系统(在代理中排队更改)。广泛的招数是:

  1. 为要捕获的更改类型(任何插入/更新/删除)创建触发器。触发器将制作XML消息并将其发送到Service Broker队列。
  2. 使用receive top(1000) cast(message_body as xml) from yourQueue等内容消费这些消息。确保你在这里阅读最佳实践(诸如毒物消息处理之类的东西)。您可以将所有内容包装在存储过程中并让应用程序调用它。
  3. 另外,如果你想避免激活,你可能会在某个时间间隔进行轮询,很可能当你的应用程序进行轮询时,你可能想要获取所有消息(或者至少要通知那里更多)。因此,您需要在循环中执行receive语句或做一些聪明的事情,例如“哦......我最多要求1000,我得到1000.可能还有更多!”所以你知道立即回去处理排队的消息。如果您希望我详细说明这一点,请告诉我。