Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: 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 ;