Tôi muốn xóa hàng đợi trong SQL Server Management Studio, nhưng tôi không muốn xóa toàn bộ hàng đợi chỉ nội dung trong hàng đợi (thư).cách xóa thư trong hàng đợi của nhà môi giới dịch vụ
Cảm ơn, Senna
Tôi muốn xóa hàng đợi trong SQL Server Management Studio, nhưng tôi không muốn xóa toàn bộ hàng đợi chỉ nội dung trong hàng đợi (thư).cách xóa thư trong hàng đợi của nhà môi giới dịch vụ
Cảm ơn, Senna
Something như thế này nên làm việc:
while(1=1)
begin
waitfor (
receive top(1)
conversation_group_id
from dbo.yourQueue;
if (@@rowcount = 0)
begin
break;
end
), timeout 1000;
end
Nếu bạn đang sử dụng [mẫu nhắn tin nơi điểm cuối nhận được dọn dẹp cuộc hội thoại] (http://rusanu.com/2014/03/31/ làm thế nào để ngăn chặn-cuộc trò chuyện-điểm cuối-rò rỉ /), bạn có thể cần phải cung cấp cho điều trị đặc biệt cho một số tin nhắn nhận được (ví dụ như gọi END CONVERSATION trên bất kỳ tin nhắn có loại EndOfStream). –
Tôi sẽ sử dụng end conversation (đó cũng sẽ loại bỏ tất cả các thư có liên quan từ tất cả hàng) sử dụng tuyên bố:
End Converstation @c With CleanUp
nếu bạn chỉ nhận được tin nhắn, sau đó bạn rời khỏi cuộc trò chuyện mở. Kết thúc cuộc trò chuyện với CleanUp chỉ dành cho các tình huống cụ thể.
Chỉ cần kết hợp hai câu trả lời trước đó (bởi Ben và Jānis) để làm rõ. Điều này làm việc cho tôi:
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
Một điều tốt nữa với câu trả lời này là sử dụng 'SELECT' thay vì' RECEIVE' làm cho nó có thể dọn dẹp hàng đợi ngay cả khi nó bị vô hiệu hóa. – jgauffin
Làm việc cho tôi khi tôi thay đổi (@@ ROWCOUNT = 0) kiểm tra với một điều kiện (@c là null). Cảm ơn – earthling42
while(1=1)
begin
waitfor (
receive top(1)
conversation_group_id
from kartokumaqueue2), timeout 1000;
if(@@ROWCOUNT = 0) break;
end
Câu trả lời này trong khi có khả năng sửa thiếu ngữ cảnh và sẽ được cải thiện bằng một bình luận mã nêu rõ lý do tại sao câu trả lời này hoạt động. Xem http://stackoverflow.com/help/how-to-answer – Jonnus
Nếu bạn đang sử dụng SQL Server (bắt đầu với năm 2008), bạn có thể sử dụng NHẬN
WHILE (0=0)
BEGIN
RECEIVE * FROM Dbo.YourQueue
END
Bạn có muốn xóa tất cả các thông điệp trong tất cả các hàng đợi trong một cơ sở dữ liệu ? Bạn nên sử dụng 'ALTER DATABASE ... SET NEW_BROKER VỚI ROLLBACK IMMEDIATE;' –