GET CONVERSATION GROUP (Transact-SQL)
为下一个要收到的消息返回会话组标识符,并锁定包含消息的会话的会话组。会话组标识符可用于在检索消息本身之前检索会话状态信息。
语法
[ WAITFOR ( ]
GET CONVERSATION GROUP @conversation_group_id
FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]
<queue> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] queue_name
}
参数
- WAITFOR
指定如果当前没有消息,则 GET CONVERSATION GROUP 语句将等待消息到达队列。
- @conversation_group_id
用于存储 GET CONVERSATION GROUP 语句返回的会话组 ID 的变量。该变量的类型必须为 uniqueidentifier。如果没有可用的会话组,则该变量设置为 NULL。
- FROM
指定要从中获取会话组的队列。
- database_name
包含从中获取会话组的队列的数据库的名称。如果没有提供 database_name,则默认为当前数据库。
- schema_name
拥有从中获取会话组的队列的架构的名称。如果没有提供 schema_name,则默认为当前用户的默认架构。
- queue_name
要从中获取会话组的队列的名称。
- TIMEOUT timeout
指定 Service Broker 等待消息到达队列的时间(毫秒)。该子句只能与 WAITFOR 子句一起使用。如果使用 WAITFOR 的语句不包括该子句,或者 timeout 为 -1,则等待时间没有限制。如果超时时间已到,则 GET CONVERSATION GROUP 将 @conversation_group_id 变量设置为 NULL。
备注
重要提示: |
---|
如果 GET CONVERSATION GROUP 语句不是批处理或存储过程中的第一个语句,则前面的语句必须以 Transact-SQL 语句终止符分号 (;) 终止。 |
如果 GET CONVERSATION GROUP 语句指定的队列不可用,则该语句将失败,并返回 Transact-SQL 错误。
该语句返回下一个可由连接成功锁定并包含可用消息的会话组。因此,在相同事务中连续调用 GET CONVERSATION 可锁定多个会话组。如果没有可用的会话组,则该语句返回 NULL 作为会话组标识符。
指定 WAITFOR 子句后,该语句将等待指定的超时时间,或等到会话组可用为止。如果在语句等待期间删除队列,则语句会立即返回一个错误。
GET CONVERSATION GROUP 在用户定义函数中无效。
权限
若要从队列中获取会话组标识符,则当前用户必须具有对队列的 RECEIVE 权限。
示例
A. 获取会话组,无限期等待
此示例将 @conversation_group_id 设置为 ExpenseQueue 中下一条可用消息的会话组标识符。该命令将等到消息变得可用为止。
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue
) ;
B. 获取会话组,等待一分钟
此示例将 @conversation_group_id 设置为 ExpenseQueue 中下一条可用消息的会话组标识符。如果没有消息在一分钟内变得可用,则不更改 @conversation_group_id 的值,直接返回 GET CONVERSATION GROUP 语句。
DECLARE @conversation_group_id UNIQUEIDENTIFIER
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue ),
TIMEOUT 60000 ;
C. 获取会话组,立即返回
此示例将 @conversation_group_id 设置为 ExpenseQueue 中下一条可用消息的会话组标识符。如果没有可用的消息,则不更改 @conversation_group_id,立即返回 GET CONVERSATION GROUP 语句。
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
GET CONVERSATION GROUP @conversation_group_id
FROM AdventureWorks.dbo.ExpenseQueue ;
请参阅
参考
BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)