插入后可配置的小时数后调用存储过程

时间:2012-01-09 22:16:24

标签: sql-server sql-server-2008-express

我正在使用SQL Server 2008 Express,但我无法购买预算不足的完整版本。

我需要的是在插入完成后调用存储过程以在一定时间后发送通知电子邮件。出于可配置的原因,该小时数也存储在数据库中。

我正在考虑使用Windows调度程序并每天运行两次存储过程,但如果用户将其设置为运行时间少于12小时,则会导致用户被通知两次或更多次。我当然也不认为每小时运行它是明智的。所以这两个选项看起来都不是最好的。

我想知道有没有办法计算这样的时间,甚至安排它在某个时间运行(使用快速记住)

非常感谢任何帮助,感谢阅读!

3 个答案:

答案 0 :(得分:1)

使用conversation timers。在插入中,您将启动一个会话计时器,该计时器可在所需的小时数后启动。当时间过去后,系统会将消息排入队列,您可以使用interval activation运行所需的过程,包括发送消息。此实现的优点是它仅依赖于SQL Express功能。它也是可靠的,如果进程关闭,您不会丢失通知,就像基于CLR或WAITFOR的解决方案一样。

有关类似的想法,请参阅Asynchronous procedure execution,但没有计时器。

即使您最后每小时(或每5分钟)检查一次待处理的“到期”通知,我仍然会使用基于Service Broker激活的机制来激活“检查”任务。我还建议您阅读Using tables as Queues

答案 1 :(得分:0)

您可以在视觉工作室中使用CLR项目来实现这一目标!

触发器将侦听在表上完成的任何插入,并作为回报调用发送电子邮件的Web服务。

答案 2 :(得分:0)

如果您可以使用SQL Server WAITFOR命令,那么它可能会有所帮助。

可能是每小时运行一次的sql存储过程,并检查它是否配置为在“this”小时运行,如果是,则发送电子邮件。

http://msdn.microsoft.com/en-us/library/ms187331.aspx