Поделиться через


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. Переменная должна принадлежать к типу 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(ru-ru,SQL.90).gifВажно!
Если инструкция GET CONVERSATION GROUP не является первой инструкцией в групповой операции или хранимой процедуре, окончание текста предыдущей инструкции должно быть отмечено при помощи точки с запятой (;), символом окончания текста инструкции в языке Transact-SQL.

Если очередь, указанная в инструкции GET CONVERSATION GROUP, недоступна, инструкция выдает ошибку языка Transact-SQL.

Эта инструкция возвращает следующую группу сообщений, которая содержит доступные сообщения и может быть успешно заблокирована соединением. Следовательно, успешные вызовы GET CONVERSATION GROUP в пределах той же транзакции могут заблокировать несколько групп сообщений. Если нет доступных групп сообщений, инструкция возвращает значение NULL в качестве идентификатора группы сообщений.

Если указано предложение WAITFOR, инструкция ожидает либо в течение указанного времени ожидания, либо до появления доступной группы сообщений. Если очередь удаляется в то время как инструкция находится в ожидании, инструкция немедленно возвращает ошибку.

GET CONVERSATION GROUP недействительна в пользовательской функции.

Разрешения

Для получения идентификатора группы сообщений из очереди текущий пользователь должен иметь для очереди разрешение RECEIVE.

Примеры

А. Получение группы сообщений, ожидание не определено

В этом примере в качестве значения @conversation_group_id используется идентификатор группы сообщений для следующего доступного сообщения в ExpenseQueue. Команда ожидает, пока сообщение не станет доступным.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

WAITFOR (
 GET CONVERSATION GROUP @conversation_group_id
     FROM ExpenseQueue
) ;

Б. Получение группы сообщений, ожидание одна минута

В этом примере в качестве значения @conversation_group_id используется идентификатор группы сообщений для следующего доступного сообщения в ExpenseQueue. Если в течение одной минуты не появится доступного сообщения, GET CONVERSATION GROUP возвращает без изменения значение @conversation_group_id.

DECLARE @conversation_group_id UNIQUEIDENTIFIER

WAITFOR (
    GET CONVERSATION GROUP @conversation_group_id 
    FROM ExpenseQueue ),
TIMEOUT 60000 ;

С. Получение группы сообщений, немедленное возвращение

В этом примере в качестве значения @conversation_group_id используется идентификатор группы сообщений для следующего доступного сообщения в ExpenseQueue. Если доступных сообщений нет, GET CONVERSATION GROUP возвращает немедленно без изменения значение @conversation_group_id.

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