Compartilhar via


GET CONVERSATION GROUP (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Retorna o identificador de grupo de conversa para a próxima mensagem a ser recebida e bloqueia o grupo para a conversa que contém a mensagem. O identificador de grupo de conversa pode ser usado para recuperar informações de estado da conversa antes de recuperar a própria mensagem.

Convenções de sintaxe de Transact-SQL

Sintaxe

[ WAITFOR ( ]  
   GET CONVERSATION GROUP @conversation_group_id  
      FROM <queue>  
[ ) ] [ , TIMEOUT timeout ]  
[ ; ]  
  
<queue> ::=  
{ database_name.schema_name.queue_name | schema_name.queue_name | queue_name }  

Argumentos

WAITFOR
Especifica que a instrução GET CONVERSATION GROUP aguarde a chegada de uma mensagem na fila se nenhuma mensagem estiver presente.

@conversation_group_id
É uma variável usada para armazenar a ID de grupo de conversa retornada pela instrução GET CONVERSATION GROUP. A variável precisa ser do tipo uniqueidentifier. Se não houver grupos de conversa disponíveis, a variável será definida como NULL.

FROM
Especifica a fila na qual o grupo de conversa deve ser obtido.

database_name
É o nome do banco de dados que contém a fila na qual o grupo de conversa deve ser obtido. Quando não for fornecido nenhum database_name, o padrão será o banco de dados atual.

schema_name
É o nome do esquema proprietário da fila na qual o grupo de conversa deve ser obtido. Quando nenhum schema_name for fornecido, ele usará como padrão o esquema padrão do usuário atual.

queue_name
É o nome da fila na qual o grupo de conversa deve ser obtido.

TIMEOUT timeout
Especifica o intervalo de tempo, em milissegundos, que o Service Broker aguarda a chegada de uma mensagem na fila. Essa cláusula só pode ser usada com a cláusula WAITFOR. Se uma instrução que usa WAITFOR não incluir essa cláusula ou se timeout for -1, o tempo de espera será ilimitado. Se o intervalo expirar, GET CONVERSATION GROUP definirá a variável @conversation_group_id como NULL.

Comentários

Importante

Se a instrução GET CONVERSATION GROUP não for a primeira instrução em um lote ou em um procedimento armazenado, a instrução anterior precisará terminar com ponto e vírgula (;), o terminador de instrução Transact-SQL.

Se a fila especificada na instrução GET CONVERSATION GROUP não estiver disponível, a instrução falhará com um erro do Transact-SQL.

Essa instrução retorna o próximo grupo de conversa onde as seguintes afirmações são verdadeiras:

  • O grupo de conversa pode ser bloqueado com êxito.

  • O grupo de conversa possui mensagens disponível na fila.

  • O grupo de conversa tem o nível de prioridade mais alto de todos os grupos de conversa que atendem aos critérios listados anteriormente. O nível de prioridade de um grupo de conversa é o mais alto atribuído a qualquer conversa que seja um membro do grupo e possua mensagens na fila.

As chamadas sucessivas a GET CONVERSATION GROUP na mesma transação podem bloquear mais de um grupo de conversa. Se nenhum grupo de conversa estiver disponível, a instrução retornará NULL como o identificador de grupo de conversa.

Quando a cláusula WAITFOR é especificada, a instrução aguarda o tempo limite especificado ou até um grupo de conversa estar disponível. Se a fila for descartada enquanto a instrução estiver aguardando, a instrução retornará um erro imediatamente.

GET CONVERSATION GROUP não é válida em uma função definida pelo usuário.

Permissões

Para obter um identificador de grupo de conversa em uma fila, o usuário atual deve ter a permissão RECEIVE na fila.

Exemplos

a. Obtendo um grupo de conversa, aguardando indefinidamente

O exemplo a seguir define @conversation_group_id como o identificador de grupo de conversa para a próxima mensagem disponível em ExpenseQueue. O comando aguarda até uma mensagem ficar disponível.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;  
  
WAITFOR (  
 GET CONVERSATION GROUP @conversation_group_id  
     FROM ExpenseQueue  
) ;  

B. Obtendo um grupo de conversa, aguardando um minuto

O exemplo a seguir define @conversation_group_id como o identificador de grupo de conversa para a próxima mensagem disponível em ExpenseQueue. Se nenhuma mensagem ficar disponível dentro de um minuto, GET CONVERSATION GROUP retornará 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. Obtendo um grupo de conversa, retornando imediatamente

O exemplo a seguir define @conversation_group_id como o identificador de grupo de conversa para a próxima mensagem disponível em ExpenseQueue. Se nenhuma mensagem estiver disponível, GET CONVERSATION GROUP retornará imediatamente sem alterar @conversation_group_id.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;  
  
GET CONVERSATION GROUP @conversation_group_id  
FROM AdventureWorks.dbo.ExpenseQueue ;  

Consulte Também

BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)