2009-01-12 64 views
1

是否可以在Windows服务中触发某个操作,或者是否有可能引发可从存储过程中捕获服务的事件。将存储过程中的事件提升到Windows服务

如果您想象一个服务每5分钟运行一次,那么它会执行一些操作。如果数据库或存储过程中发生某些事情会被执行,我想在5分钟之前触发此操作。

有没有人有任何想法?

感谢

埃德

回答

0

继Mehrdad的评论之后,我能够使用.NET框架中的SqlDependancy类来解决问题。

这个类允许你注册一个SQL查询并与它连接,当查询的结果发生变化时引发一个事件来指示数据的变化。

这使我几乎可以即时捕获数据变化并进行适当处理。

为了使用这个类,你需要将你想查询看到数据库上启用查询通知:Enabling Query Notifications

如何在Windows应用程序中使用这个类的一个好例子中发现here

1

您可以创建SQL Server中的CLR过程,不知怎的,使用SOAP,远程处理,或任何介质中的服务进行通信。虽然这是通用的。我认为SQL Server 2005的查询通知功能在这里很有帮助。

+0

我认为你是对的,我刚刚阅读了有关查询通知,他们似乎是我有问题的正确答案。谢谢。 – MrEdmundo 2009-01-12 17:21:09

0

如果你做一个RAISERROR(@的ErrorMessage,16,1)应该只要你用16的严重性和状态,1

2

这听起来像你不该”生成客户端上的一个例外根本不使用Windows服务。我会设置一个SQL作业,每5分钟运行一次,然后设置一个触发器或任何您希望在必要时手动运行作业的事情。

编辑: 但是,如果服务在数据库之外做一些事情,可以使用xp_cmdshell来运行系统命令(尽管不是最好的选择)。

+0

DTS可能是比windows服务更好的解决方案。 – 2009-01-12 16:52:33