0

SQL Server 2008 R2 で 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 テーブルに 1 つのエントリが取得されます。したがって、上記のクエリでは、2 つのエンドポイントが追加されています。dbo.Appointment テーブルに行を挿入すると、最初のクエリに関連するエンドポイントに 1 つの通知が配信されます。次に、@conversation_handle で END CONVERSATION を呼び出しますが、これをストアド プロシージャとして登録したので、2 番目のクエリの会話も終了させたいと考えています。両方のエントリが異なる conversation_group_id 列を持っているため、これを行う方法がわかりません。

SqlDependency/SqlNotificationRequest を使用してこれを行う方法はありますか? または、ストアド プロシージャで会話グループを手動でセットアップし、SqlDependency/SqlNotificationRequest の使用を停止する必要がありますか?

4

1 に答える 1

2

多くの検索の結果、クエリ通知を適切にクリーンアップする唯一の方法は、クエリ通知にタイムアウトを設定し、アプリケーション層で既に処理されたイベントをフィルタリングすることであると判断しました。

于 2013-07-30T17:48:00.083 に答える