2012-06-06 34 views
0

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

+0

可能的情况下始终避免轮询。为什么不使用触发器? –

回答

1

你不说你使用的是什么版本的SQL Server,但如果它是2005+,Service Broker为这个做。在你的触发器中,在队列中输入(短)消息。让你的服务在队列上执行WAITFOR,然后触发RECIEVE抓取消息。看看是否没有什么可做,比旋转周期更好。

+0

该版本是2005年,我对服务代理犹豫不决,因为从我读的内容来看,安装起来有点复杂,但情况并非如此? – retslig

+0

虽然有一些问题,但并没有那么糟糕。展望未来,SQL Server产品中越来越多的功能是通过服务代理实现的。你会在学习中帮助你。 :) –

3

我个人而言,会从未呼叫触发一个Web服务。我会编写一个服务来轮询表中的新数据并异步调用Web服务。

的主要问题是,如果你在呼唤一个触发Web服务,那么你可以进入的情况下,由此您把锁打开很长一段时间。如果该锁已升级为表锁,则在此期间阻止表上的所有操作。

它也不会留给你一个很好的重试策略应该你的Web服务调用失败,无论出于何种原因。你是否期望你的触发器以某种方式将行标记为稍后重试?什么会触发该重试?

利用基于服务的方式,你把它简单得多,并且与运行到锁定问题的要少得多的机会 - 这可能会非常棘手,在最好的时候诊断 - 特别是如果他们是短暂的。

+0

+1调用长时间运行和原则上不可靠的外部触发器让我感到紧张。 – usr

相关问题