Sql-Server

為什麼 WAITFOR (RECEIVE FROM QUEUE) 在監視器中顯示不正確?

  • December 17, 2012

我在我的應用程序中啟動了以下命令:

WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)

當我執行“sp_who2 active”時,我得到 Status=SUSPENDED 和 Command=DELETE

在此處輸入圖像描述

注意:從 StackOverflow 移出。

因為是一個DELETE。RECEIVe 只是類似的語法糖

DELETE from queue
OUTPUT DELETED.*
WHERE status = <receivable>;

如果啟用保留,則為 UPDATE,並將顯示為 UPDATE。有一些細節,比如會話組鎖定是如何完成的,如何確保正確的消息 ExactlyOnceInOrder 語義以及 RECEIVE 的語法樹並不是真正可以在 T-SQL 中建構的。正如我所說,細節…

我在Using Tables as Queues中推薦使用 DELETE 的 OUTPUT 子句從表中“出列”,這絕非巧合……

引用自:https://dba.stackexchange.com/questions/30624