Как удалять сообщения в очереди сервис-брокера

Я хочу очистить свою очередь в SQL Server Management Studio, но я не хочу удалять всю очередь только содержимое в очереди (сообщения).

Спасибо, Сенна

Ответ 1

Примерно так должно работать:

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

    if (@@rowcount = 0)
        break;
end

Ответ 2

Простое сочетание двух предыдущих ответов (Бен и Янис) для ясности. Это сработало для меня:

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

Ответ 3

Я бы использовал конец разговора (который также удалит все связанные сообщения из всех очередей) с помощью инструкции:

End Converstation @c With CleanUp

Если вы просто получите сообщение, вы оставите разговор открытым. End Conversation With CleanUp предназначен только для конкретных ситуаций.

Ответ 4

Если вы используете SQL Server (начиная с 2008 года), вы можете использовать RECEIVE

WHILE (0=0)
BEGIN
RECEIVE * FROM Dbo.YourQueue
END

Ответ 5

while(1=1)
begin
    waitfor (
        receive top(1)
        conversation_group_id
        from kartokumaqueue2), timeout 1000;

        if(@@ROWCOUNT = 0) break;
end