从触发器或轮询调用 SQLCLR

本文关键字:调用 SQLCLR 触发器 | 更新日期: 2023-09-27 18:36:22

我有一个将接收来自第三方软件的消息的表,我需要一种触发机制来调用我的dotnet代码。 例如,调用 SQLCLR 的触发器的优缺点是什么,然后可以调用 Web 服务,而不是让我的代码轮询表以进行更改。怀疑表的平均负载会很少,每天可能有几千个事务。

从触发器或轮询调用 SQLCLR

我个人永远不会在触发器中调用 Web 服务。我将编写一个服务来轮询表中的新数据并异步调用 Web 服务。

主要问题是,如果您在触发器中调用 Web 服务,那么您可能会遇到长时间保持锁打开的情况。如果该锁已升级为表锁,则您将在持续时间内阻止表上的所有操作。

它也不会给你留下一个非常好的重试策略,如果你对 Web 服务的调用由于任何原因失败。您是否希望触发器以某种方式标记行以供以后重试?什么会触发重试?

使用基于服务的方法,您可以使其简单得多,并且遇到锁定问题的可能性要小得多 - 在最好的时候诊断可能很棘手 - 特别是如果它们是暂时性的。

你没有说你使用的是哪个版本的SQL Server,但如果是2005+,Service Broker就是为此而生的。在触发器中,将(短)消息放在队列中。让您的服务在队列上执行 WAITFOR,然后触发 RECIEVE 来获取消息。比旋转循环更好,看看是否无事可做。