Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: 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 ;