0

我使用的服務代理上的SQL Server 2008 R2,和我註冊有多個SELECT語句這樣一個存儲過程:如何正確使用多重結果查詢(SQL Service Broker)調用「結束對話」?

SELECT 
    A.Date 
    ,A.Id 
FROM 
    dbo.Appointment A 

SELECT 
    P.Name 
FROM 
    dbo.Person P 

當我使用C#對象的SqlDependency或SqlNotificationRequest註冊查詢,我在我的查詢中爲每個select語句在sys.conversation_endpoints表中獲取一個條目。所以通過上面的查詢,我得到了2個端點。當我向dbo.Appointment表中插入一行時,我得到一個單一的通知傳遞給與第一個查詢相關的端點。然後我在@conversation_handle上調用END CONVERSATION,但是因爲我將它註冊爲存儲過程,所以我想結束第二個查詢的對話。我不知道如何做到這一點,因爲兩個條目都有不同的conversation_group_id列。

有沒有辦法使用SqlDependency/SqlNotificationRequest來做到這一點,還是我需要在我的存儲過程中手動設置對話組並停止使用SqlDependency/SqlNotificationRequest?

+0

我想我可以爲通知設置一個超時時間(15分鐘左右),如果他們還沒有開通,應該結束所有的會話,但我想立即清理這些通知。 – lehn0058

回答

2

經過大量搜索後,我確定正確清理查詢通知的唯一方法是對它們設置超時並過濾已在應用程序層處理過的事件。