我在SQL2005数据库中有一个负载很重的表(许多插入/更新/删除).我想尽可能接近实时地对所有这些更改进行一些后期处理(异步以便不以任何方式锁定表).我看了很多可能的解决方案,但似乎无法找到一个感觉正确的整洁解决方案.
后期处理的类型也相当繁重,以至于Windows侦听器服务实际上将处理传递给许多机器.然而,应用程序的这部分已经启动并运行,完全异步,而不是我需要帮助 - 我只是想提及这只是因为它影响设计决策,因为我们不能只加载一些CLR对象DB完成处理.
所以,简单的问题仍然存在:表中的数据更改,我想在远程服务器上的c#代码中进行一些处理.
目前我们已经提出使用一个sql触发器,它执行"xp_cmdshell"来启动一个引发windows服务正在侦听的事件的exe.这只是感觉很糟糕.
但是,我在网上看到的其他解决方案也让人感到相当费解.例如,设置SQLCacheDependancy还涉及必须设置Service Broker.另一个可能的解决方案是使用CLR触发器,它可以调用Web服务,但是这里有很多关于它的警告,这是一个糟糕的方法,尤其是在性能至关重要时.
理想情况下,我们不会对表格进行更改,而是会拦截我们的应用程序中的调用并从那里通知服务,遗憾的是,虽然我们有一些遗留应用程序也会对数据进行更改,并且监视表格是唯一的集中位置此时此刻.
非常感激任何的帮助.
摘要:
我在Windows应用程序中使用EF,我希望我的应用程序在某个表中插入新记录时执行某些任务"这些新记录将由使用相同数据库的网站插入"
我的问题是如何查看此表更改并在新记录到来时收到通知,在这种情况下EF可以帮助我吗?
更新: 我使用了SqlDependency类并在db中使用了它
ALTER DATABASE UrDb SET ENABLE_BROKER
并且还在数据库http://screencast.com/t/vrOjJbA1y中创建了一个服务和一个队列,但我从未通过我的Windows应用程序收到通知.
此外,当我在sql server中打开队列时,它总是空的http://screencast.com/t/05UPDIwC8ck 接缝有错误,但我不知道.
我想知道什么时候需要在SQL Server中使用CLR功能.
有人说CLR主要用于完成T-SQL无法完成的任务.但我无法弄清楚T-SQL的一个很好的例子未能给我我的确切输出.
有人可以给我一个通过T-SQL无法实现的确切示例吗?
样品将非常感谢!