从触发器或轮询中调用SQLCLR?

时间:2012-06-06 19:05:05

标签: c# sql-server sqlclr

我有一个表将接收来自第三方软件的消息,我需要一个触发机制来调用我的dotnet代码。调用SQLCLR的触发器的优点和缺点是什么,然后可以调用Web服务,例如只需让我的代码轮询表中的更改。怀疑表的平均负荷会非常小,可能每天只有几千笔交易。

2 个答案:

答案 0 :(得分:3)

我个人认为,从不在触发器中调用Web服务。我会编写一个服务,轮询表中的新数据并异步调用Web服务。

主要问题是,如果您在触发器中调用Web服务,那么您可以进入长时间保持锁定状态的情况。如果该锁已升级为表锁,则表示您在此期间阻止表上的所有操作。

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

使用基于服务的方法,您可以更加简单,并且更容易遇到锁定问题 - 这在最佳时间进行诊断可能会非常棘手 - 特别是如果它们是短暂的。

答案 1 :(得分:1)

您没有说明您使用的是哪个版本的SQL Server,但如果它是2005年以上,Service Broker就是为此而制作的。在触发器中,在队列中放入(短)消息。让您的服务在队列上执行WAITFOR,然后触发RECIEVE以获取消息。比旋转周期更好看看是否无事可做。