Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Azure SQL Managed Instance
Devolve o identificador do grupo de conversa para a próxima mensagem a receber e bloqueia o grupo de conversa para a conversa que contém a mensagem. O identificador do grupo de conversa pode ser usado para recuperar informação sobre o estado da conversa antes de recuperar a própria mensagem.
Transact-SQL convenções de sintaxe
Syntax
[ WAITFOR ( ]
GET CONVERSATION GROUP @conversation_group_id
FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]
<queue> ::=
{ database_name.schema_name.queue_name | schema_name.queue_name | queue_name }
Arguments
WAITFOR
Especifica que a GET CONVERSATION GROUP instrução espera que uma mensagem chegue à fila se não houver mensagens presentes no momento.
@conversation_group_id
É uma variável usada para armazenar o ID do grupo de conversa devolvido pela GET CONVERSATION GROUP instrução. A variável deve ser do tipo uniqueidentifier. Se não houver grupos de conversa disponíveis, a variável é definida como NULL.
FROM
Especifica a fila de onde se pode obter o grupo de conversa.
database_name
É o nome da base de dados que contém a fila para obter o grupo de conversa. Quando não é fornecido database_name , passa por defeito à base de dados atual.
schema_name
É o nome do esquema que detém a fila de onde se obtém o grupo de conversa. Quando não há schema_name fornecida, o esquema predefinido para o utilizador atual é predefinido.
queue_name
É o nome da fila para obter o grupo de conversa.
TIMEOUT
Especifica o tempo, em milissegundos, que o Service Broker espera que uma mensagem chegue à fila. Esta cláusula só pode ser usada com a cláusula WAITFOR. Se uma instrução que utiliza WAITFOR não incluir esta cláusula ou se o timeout for -1, o tempo de espera é ilimitado. Se o timeout expirar, GET CONVERSATION GROUP define a variável @conversation_group_id como NULL.
Observações
Importante
Se a GET CONVERSATION GROUP instrução não for a primeira de um procedimento em lote ou armazenado, a instrução anterior deve ser terminada com um ponto e vírgula (;), o terminador da Transact-SQL instrução.
Se a fila especificada na GET CONVERSATION GROUP instrução não estiver disponível, esta falha com um erro de Transact-SQL.
Esta afirmação devolve o próximo grupo de conversa onde tudo o seguinte é verdadeiro:
O grupo de conversa pode ser bloqueado com sucesso.
O grupo de conversa tem mensagens disponíveis na fila.
O grupo de conversação tem o nível de prioridade mais elevado de todos os grupos que cumprem os critérios anteriormente listados. O nível de prioridade de um grupo de conversação é o nível de prioridade mais alto atribuído a qualquer conversa que seja membro do grupo e tenha mensagens na fila.
Chamadas sucessivas dentro GET CONVERSATION GROUP da mesma transação podem bloquear mais do que um grupo de conversa. Se não houver grupo de conversa disponível, a instrução devolve NULL como identificador do grupo de conversa.
Quando a cláusula WAITFOR é especificada, a instrução espera pelo timeout especificado, ou até que um grupo de conversa esteja disponível. Se a fila for interrompida enquanto a instrução está à espera, a instrução devolve imediatamente um erro.
GET CONVERSATION GROUP não é válido numa função definida pelo utilizador.
Permissions
Para obter um identificador de grupo de conversa a partir de uma fila, o utilizador atual deve ter RECEIVE permissão na fila.
Examples
A. Criar um grupo de conversa, esperar indefinidamente
O exemplo seguinte define @conversation_group_id para o identificador do grupo de conversa para a próxima mensagem disponível em ExpenseQueue. O comando espera até que uma mensagem fique disponível.
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue
) ;
B. Formar um grupo de conversa, esperar um minuto
O exemplo seguinte define @conversation_group_id para o identificador do grupo de conversa para a próxima mensagem disponível em ExpenseQueue. Se nenhuma mensagem ficar disponível dentro de um minuto, retorna GET CONVERSATION GROUP sem alterar o valor de @conversation_group_id.
DECLARE @conversation_group_id UNIQUEIDENTIFIER
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue ),
TIMEOUT 60000 ;
C. Criar um grupo de conversa, regressar imediatamente
O exemplo seguinte define @conversation_group_id para o identificador do grupo de conversa para a próxima mensagem disponível em ExpenseQueue. Se não houver mensagem disponível, retorna GET CONVERSATION GROUP imediatamente sem alterar @conversation_group_id.
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
GET CONVERSATION GROUP @conversation_group_id
FROM AdventureWorks.dbo.ExpenseQueue ;
Ver também
BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)