我有一個包含我的Windows服務應該處理的,關閉時間戳,我想知道我有什麼替代輪詢這樣替代輪詢MSSQL表
SELECT *
FROM mydb
WHERE SYSUTCDATE() >= timestamp
我表計劃任務MSSQL表d可能需要至少每5秒輪詢一次表格。基本上我希望我的Windows服務在表中由時間戳設置的時間處理數據。
對我來說這似乎並不是最有效的方法。我已經研究過DML & CLR觸發器,我不認爲他們會工作,因爲他們會在數據更改時觸發,而不是當時間戳已經過去。思考?
更新2:
我已經意識到,把它稱爲「計劃任務」是措辭的一個糟糕的選擇,所以我會盡力來形容它的更多細節。
該項目的目標是根據我們的業務邏輯發送電話通知給人們。一種情況是應該根據內部事件在特定時間打電話給多個人。根據接聽電話的方式,可以多次呼叫同一個人。因此,爲了簡化事情並消除管理每個電話狀態的複雜性和開銷,我認爲通過將每個電話作爲表中的條目來預先安排每個電話將是個好主意。當通知應該停止時,待處理的電話將從表格中刪除。這將保持Windows服務的設計非常簡單。它所要做的就是根據表格中的時間戳發送通知。
更新1:
消息隊列
我還沒有想出發件人將如何將消息到隊列中在適當的時間。
的SqlDependency
我使用的示例代碼從Detecting Changes with SqlDependency有一個問題。出於某種原因,OnChange事件最初只會被觸發,以後什麼都不會發生。
更新:我不認爲SqlDependency將工作,因爲表中的數據不會改變,使觸發器觸發。
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT timestamp,othercolumn FROM mydb WHERE SYSUTCDATE() >= timestamp",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
您是否考慮過使用消息隊列? – recursive 2014-10-07 21:52:28
嘗試SqlDependency:http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx – 2014-10-07 21:57:44
您是否考慮將這些轉換爲作業並通過SQL Server代理運行它們? – 2014-10-07 21:57:56