web-dev-qa-db-fra.com

Supprimer les messages dans la file d'attente Service Broker

Je voudrais effacer ma file d'attente dans SQL Server Management Studio, mais je ne veux pas supprimer toute la file d'attente uniquement le contenu de la file d'attente (les messages).

17
senna

Quelque chose comme ça devrait fonctionner:

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

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

Il suffit de combiner les deux réponses précédentes (par Ben et Jānis) pour plus de clarté. Cela a fonctionné pour moi:

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
Rebecca Campbell

J'utiliserais mettre fin à la conversation (qui supprimera également tous les messages associés de toutes les files d'attente) en utilisant l'instruction:

End Converstation @c With CleanUp

si vous venez de recevoir un message, vous laissez la conversation ouverte. Mettre fin à la conversation avec CleanUp est uniquement pour des situations spécifiques.

9
Jānis

Si vous utilisez SQL Server (à partir de 2008), vous pouvez utiliser RECEIVE

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