SELECT(不带 ORDER BY)是否返回与 RECEIVE 相同的消息?

jga*_*fin 1 sql-server service-broker

我当前的客户端需要能够查看 SQL Server Service Broker 队列中的消息。当前的实现使用 RECEIVE 和 rollback 来窥视。

由于这会生成对事务日志的写入,我想知道 SELECT TOP(1) 是否会返回与 RECEIVE 命令相同的行?

该队列有多个作者,但只有一个读者。

Rem*_*anu 5

不。RECEIVE 构造了一个不能用 SELECT 构造的查询 AST。RECEIVE 必须保证 EOIO 和会话组锁定,SELECT 没有。

Service Broker 具有内置的“窥视”功能:GET CONVERSATION GROUP. 这将锁定下一个可用的会话组,如果您在同一事务中发出 RECEIVE ,则保证您会收到一条消息。我强烈反对使用它。

您尝试执行的任何其他操作都已损坏,您需要更改应用程序以停止执行此操作。始终发出 RECEIVE 并对返回的消息结果集做出反应。