2011-09-13 164 views
1

我已经写了一个餐厅管理应用程序。 我有一个基于SQL Server 2005的数据库,它有一个名为OrdersItems的表。每隔5分钟我想读取此表的所有行并根据特定条件更新一些字段。数据库计划操作

我不想在我的主应用程序中这样做,我更喜欢有一个替代引擎来执行此操作。

哪种方法是执行此类任务的最佳方法?另请注意,此表(OrdersItems)每次都在处理中,因为主应用程序必须始终运行并获取新的餐馆订单。

+0

您使用的是Express版还是其他版本? –

回答

3

您可以create a SQL Server Agent job每五分钟更新一次。

如果您使用SQL Server Express版本,则不能使用SQL Server代理程序,因为它只包含在“更大”版本的SQL Server中。
在这种情况下,you can create your jobs manually使用批处理文件和Windows任务计划程序。

1

我期望SQL任务/维护计划将是最好的。

您可以将它们设置为您想要的任何时间间隔,指定要运行的SQL语句,维护任务等。

如果你想知道它何时失效,你也可以设置警报等。

0

在可以访问数据库的服务器上部署cron作业,每隔5分钟启动一次,并使用事务处理数据。我在那里看到一个问题:如果要处理的数据量很大,它可能会运行超过五分钟。

+3

cron作业在C#\ SQL Server解决方案中并不完全常见 –

2

我绝对同意Christian和dougajmcdonald关于使用SQL任务/维护的观点。但是,由于您在代码中包含,因此可以选择创建Windows服务。

这种方法

  • 的好处是可以的机器没有安装SQL Server代理(包括Express版)
  • 可在用户登录的上下文之外运行上运行。
  • 标准停止启动暂停继续机制,这是很好理解。
  • 如果服务本身出现故障时可能会导致在事件日志

This answer包含一个Windows服务,定期获取数据并执行模板。您可能只是想要更改DoStuff方法来执行存储过程

+0

谢谢,我对这种方法很感兴趣,但是我想知道这种方法会降低数据库性能吗?正如我之前提到的,这张表总是在处理中。 – Shahrokh

+0

就数据库性能而言,我不认为您使用哪种技术(对话计时器,SQL代理,窗口服务,cron作业)并不重要。无论使用哪一个,您都需要优化Update语句。 –

2

创建一个dialog timer并让它存储过程activate。这具有完全包含在数据库内部的优点(无需外部进程),它不需要SQL Agent(在Express上运行),并且在数据库分离/附加和备份/恢复操作(预定作业将在新恢复的数据库恢复后运行)。