web-dev-qa-db-ja.com

Service Brokerキュー内のメッセージを削除する

SQL Server Management Studioでキューをクリアしたいのですが、キューの内容(メッセージ)だけをキュー全体から削除したくありません。

17
senna

このようなものはうまくいくはずです:

while(1=1)
begin
    waitfor (
        receive top(1)
        conversation_group_id
        from dbo.yourQueue
    ), timeout 1000;

    if (@@rowcount = 0)
        break;
end
17
Ben Thul

明確にするために、前の2つの回答(BenとJānisによる)を組み合わせるだけです。これは私のために働きました:

declare @c uniqueidentifier
while(1=1)
begin
    select top 1 @c = conversation_handle from dbo.queuename
    if (@@ROWCOUNT = 0)
    break
    end conversation @c with cleanup
end
49

私は 会話の終了 を使用します(これにより、すべての関連メッセージもすべてのキューから削除されます)usingステートメント:

End Converstation @c With CleanUp

メッセージを受け取っただけなら、会話は開いたままにします。 CleanUpでの会話の終了は、特定の状況でのみ使用できます。

9
Jānis

SQL Server(2008以降)を使用している場合は、RECEIVEを使用できます

WHILE (0=0)
BEGIN
    RECEIVE * FROM dbo.YourQueue;
    IF (@@ROWCOUNT = 0) BREAK;
END
1
Oscar Acevedo