Desidero cancellare la coda in SQL Server Management Studio, ma non desidero eliminare l'intera coda solo il contenuto della coda (i messaggi).come eliminare i messaggi nella coda del broker di servizi
Grazie, Senna
Desidero cancellare la coda in SQL Server Management Studio, ma non desidero eliminare l'intera coda solo il contenuto della coda (i messaggi).come eliminare i messaggi nella coda del broker di servizi
Grazie, Senna
Qualcosa di simile dovrebbe funzionare:
while(1=1)
begin
waitfor (
receive top(1)
conversation_group_id
from dbo.yourQueue;
if (@@rowcount = 0)
begin
break;
end
), timeout 1000;
end
Se si sta utilizzando un [modello di messaggistica in cui l'endpoint ricevente ripulisce la conversazione] (http://rusanu.com/2014/03/31/ how-to-prevent-conversation-endpoint-leaks /), potrebbe essere necessario dare un trattamento speciale a determinati messaggi ricevuti (ad esempio, chiama END CONVERSATION su tutti i messaggi il cui tipo è EndOfStream). –
userei end conversation (che sarà anche rimuovere tutti i messaggi correlati da tutte le code) con dichiarazione:
End Converstation @c With CleanUp
se si riceve solo un messaggio, quindi si lascia aperta la conversazione. Fine conversazione con CleanUp è solo per situazioni specifiche.
Basta combinare le due risposte precedenti (di Ben e Jānis) per chiarezza. Questo ha funzionato per me:
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
Un altro aspetto positivo di questa risposta è che l'uso di 'SELECT' invece di' RECEIVE' rende possibile la pulizia della coda anche se è disabilitata. – jgauffin
Ha funzionato per me quando ho cambiato il controllo (@@ ROWCOUNT = 0) con una condizione (@ c è nulla). Grazie – earthling42
while(1=1)
begin
waitfor (
receive top(1)
conversation_group_id
from kartokumaqueue2), timeout 1000;
if(@@ROWCOUNT = 0) break;
end
Questa risposta, sebbene potenzialmente corretta, manca di contesto e sarebbe migliorata da un commento sul codice che spiega perché questa risposta funziona. Vedi http://stackoverflow.com/help/how-to-answer – Jonnus
Se si utilizza SQL Server (a partire con il 2008) si possono usare RICEZIONE
WHILE (0=0)
BEGIN
RECEIVE * FROM Dbo.YourQueue
END
Vuoi cancellare tutti i messaggi in tutte le code in un database ? Si dovrebbe usare 'ALTER DATABASE ... SET NEW_BROKER WITH ROLLBACK IMMEDIATE;' –