如何使用多结果查询(SQL Service Broker)正确调用“End Conversation”?

时间:2013-07-16 17:45:03

标签: c# sql-server service-broker sqldependency query-notifications

我在SQL Server 2008 R2上使用Service Broker,我正在注册一个包含多个select语句的存储过程:

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

SELECT
    P.Name
FROM
    dbo.Person P

当我使用C#对象SqlDependency或SqlNotificationRequest注册查询时,我在sys.conversation_endpoints表中为我的查询中的每个select语句获取一个条目。因此,通过上面的查询,我添加了2个端点。当我在dbo.Appointment表中插入一行时,我会收到一个与第一个查询相关的终端通知。然后我在@conversation_handle上调用END CONVERSATION,但是因为我将它注册为存储过程,所以我想结束第二个查询的对话。我不知道如何做到这一点,因为两个条目都有不同的conversation_group_id列。

有没有办法使用SqlDependency / SqlNotificationRequest执行此操作,还是需要在我的存储过程中手动设置会话组并停止使用SqlDependency / SqlNotificationRequest?

1 个答案:

答案 0 :(得分:2)

经过大量搜索后,我确定了正确清理查询通知的唯一方法是对它们设置超时并过滤已在应用层处理过的事件。