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。

备注

ms178624.note(zh-cn,SQL.90).gif重要提示:
如果 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)

其他资源

Conversation Group Locks

帮助和信息

获取 SQL Server 2005 帮助