为什么 WAITFOR (RECEIVE FROM QUEUE) 错误地显示在监视器中?

Ang*_*ker 5 sql-server-2005 sql-server service-broker

我在我的应用程序中启动以下命令:

WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)
Run Code Online (Sandbox Code Playgroud)

当我运行 `sp_who2 active' 时,我得到 Status=SUSPENDED 和 Command=DELETE

在此处输入图片说明

注意:移自 StackOverflow。

Rem*_*anu 10

因为是 DELETE。RECEIVe 只是类似的语法糖

DELETE from queue
OUTPUT DELETED.*
WHERE status = <receivable>;
Run Code Online (Sandbox Code Playgroud)

如果启用保留,则为 UPDATE,并将显示为 UPDATE。有一些细节,比如会话组锁定是如何完成的,如何确保正确的消息 ExactlyOnceInOrder 语义,以及 RECEIVE 的语法树实际上不可能在 T-SQL 中构建。正如我所说,细节...

我在使用表作为队列中建议使用DELETE 的 OUTPUT 子句从表中“出列”,这绝非巧合...