GET CONVERSATION GROUP (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

[ WAITFOR ( ]  
   GET CONVERSATION GROUP @conversation_group_id  
      FROM <queue>  
[ ) ] [ , TIMEOUT timeout ]  
[ ; ]  
  
<queue> ::=  
{ database_name.schema_name.queue_name | schema_name.queue_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
Имя очереди, из которой должна быть получена группа сообщений.

ТАЙМ-аут
Указывает продолжительность времени (в миллисекундах), в течение которого компонент 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 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  
) ;  

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

В следующем примере в качестве значения @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 ;