用于监视DML更改的SQL Server Service Broker
本文关键字:SQL Server Service Broker 监视 DML 用于 | 更新日期: 2023-09-27 18:02:38
我想做的:
-
通过c#外部应用程序监听X表上的DB insert/update语句
-
在每次插入/更新时,我希望收到通知
-
通知后,我想检索插入/更新的行
我是如何处理这个问题的:
-
为每个表创建一个DML触发器,在insert/update
之后更新每个表上的服务代理队列 在此之后,我不完全清楚的方法。主要是,我如何从服务代理队列接收通知?
根据我的理解,SqlDependency
需要一个查询来检测更改。因此,我是否指定针对目标队列的查询?
谢谢
SqlDependency是一个抽象,它在底层使用Service Broker来传递通知。在这种情况下,我认为你可以忽略它(它是SqlDependency)
我实际上已经实现了一个类似的系统(在broker中排队更改)。粗线条是:
- 为您想要捕获的更改类型(任何插入/更新/删除)创建一个触发器。触发器将生成XML消息并将其发送到Service Broker队列。
- 使用
receive top(1000) cast(message_body as xml) from yourQueue
之类的东西消费这些消息。确保您在这里阅读了最佳实践(如有毒消息处理等)。您可以将所有这些都包装在一个存储过程中,并让应用程序调用它。
同样,如果您避免激活,您可能会在一定间隔内轮询,当您的应用程序进行轮询时,您可能希望获得所有消息(或者至少被通知有更多消息)。所以你会想要在循环中执行receive
语句,或者做一些聪明的事情,比如"哦……我要求最多1000,我得到了1000。"可能还有更多!"这样您就知道应该立即返回处理排队的消息。