2011-09-13 82 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上運行),並且在數據庫分離/附加和備份/恢復操作(預定作業將在新恢復的數據庫恢復後運行)。