2011-12-27 63 views
3

是否有可能在不執行查詢的情況下在C#中爲Sql Server運行SqlDependencySqlDependency不執行查詢

我有一些表可以增長相當大。在表中執行查詢以判斷某行是否已更改可能需要很長時間。

+0

有一個網站可以幫助你回答這個問題http://msdn.microsoft.com/en-us/library/62xk7953(VS.80).aspx本網站將向用戶展示如何在需要時訂閱活動檢查sqlDependency – MethodMan 2011-12-27 21:12:45

+0

我有一個工作的SqlDependency設置。我只是想知道是否有辦法做到這一點,而不執行「command.ExecuteResult()」命令。我已經將它設置爲與「command.ExecuteNonQuery()」一起工作,該工作正常,但當表有數百萬行重新執行時,它仍然變慢。 – Stuart 2011-12-27 21:14:34

回答

5

不,SqlDependency需要一個SqlCommand來執行。

如果性能是一個問題,您可以考慮其他設計,例如向要監視的表添加觸發器,並在每次更改行時寫入提取表,然後讓SqlDependency監控提取表。

如果原始表中更改的任何行應該觸發依賴關係,那麼您的提取表可能就像包含已更改行數的計數器的單個行一樣簡單。當這個值改變時,依賴性會被觸發。

或者,提取表可能只包含表中任何行更改的最後日期/時間的時間戳。

+0

好吧。這正是我需要的。謝謝。 – Stuart 2011-12-27 21:17:42

0

接受的答案有效,但如果您處於無法(或不想)使用觸發器的位置,則有其他選擇。

使用一個存儲過程,每次提取數據時都會更改參數。例如:

Alter PROCEDURE someschema.SQLDependency_DC_PRE 
    @MaxDCIdx INT = 1 
AS 

SELECT DCIdx FROM someschema.DC_PRE WHERE DCIdx >= @MaxDCIdx ORDER BY DCIdx DESC; 

然後,你可一定要返回每次只有一排,這應保持SQL的查詢是一個主鍵或索引字段,只要加載了下來。