GET CONVERSATION GROUP (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Devuelve el identificador del grupo de conversación del siguiente mensaje que se va a recibir y bloquea el grupo de la conversación que contiene el mensaje. El identificador del grupo de conversación se puede utilizar para recuperar información del estado de la conversación antes de recuperar el propio mensaje.

Convenciones de sintaxis de Transact-SQL

Sintaxis

[ 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 la GET CONVERSATION GROUP instrucción espera a que llegue un mensaje a la cola si no hay mensajes presentes en ese momento.

@conversation_group_id
Es una variable utilizada para almacenar el ID del grupo de conversación devuelto por la GET CONVERSATION GROUP sentencia. La variable debe ser de tipo uniqueidentifier. Si no está disponible ningún grupo de conversación, la variable se establece en NULL.

FROM
Especifica la cola de la que se obtiene el grupo de conversación.

database_name
Es el nombre de la base de datos que contiene la cola de la que obtiene el grupo de conversación. Si no se proporciona database_name, el valor predeterminado es la base de datos actual.

schema_name
Es el nombre del esquema propietario de la cola de la que obtiene el grupo de conversación. Si no se proporciona schema_name, se usa el esquema predeterminado del usuario actual.

queue_name
Es el nombre de la cola de la que se obtiene el grupo de conversación.

TIMEOUT tiempo_de_espera
Especifica el tiempo, en milisegundos, que espera Service Broker a que llegue un mensaje a la cola. Esta cláusula solo se puede usar con la cláusula WAITFOR. Si una instrucción que usa WAITFOR no incluye esta cláusula o tiempo_de_espera es -1, el tiempo de espera es ilimitado. Si expira el tiempo de espera, GET CONVERSATION GROUP se establece la variable @conversation_group_id en NULL.

Comentarios

Importante

Si la GET CONVERSATION GROUP sentencia no es la primera de un procedimiento por lotes o almacenado, la sentencia anterior debe terminarse con punto y coma (;), el terminador de Transact-SQL sentencia.

Si la cola especificada en la GET CONVERSATION GROUP instrucción no está disponible, la instrucción falla con un error de Transact-SQL.

Esta instrucción devuelve el siguiente grupo de conversación donde se dan todas las condiciones siguientes:

  • El grupo de conversación se puede bloquear correctamente.

  • El grupo de conversación tiene mensajes disponibles en la cola.

  • El grupo de conversación tiene el nivel de prioridad más alto de todos los grupos de conversación que cumplen los criterios mencionados anteriormente. El nivel de prioridad de un grupo de conversación es el nivel de prioridad más alto asignado a cualquier conversación que sea miembro del grupo y que tenga mensajes en la cola.

Las llamadas sucesivas dentro GET CONVERSATION GROUP de la misma transacción pueden bloquear más de un grupo de conversación. Si no está disponible ningún grupo de conversación, la instrucción devuelve NULL como identificador del grupo de conversación.

Si se especifica la cláusula WAITFOR, la instrucción espera a que se agote el tiempo de espera especificado o hasta que haya un grupo de conversación disponible. Si se quita la cola mientras la instrucción está esperando, dicha instrucción devuelve un error inmediatamente.

GET CONVERSATION GROUP no es válida en una función definida por el usuario.

Permisos

Para obtener un identificador de grupo de conversación de una cola, el usuario actual debe tener RECEIVE permiso en la cola.

Ejemplos

A. Obtener un grupo de conversación, esperando indefinidamente

En el siguiente ejemplo se establece @conversation_group_id en el identificador de grupo de conversación para el siguiente mensaje disponible en ExpenseQueue. El comando espera hasta que un mensaje esté disponible.

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

B. Obtener un grupo de conversación, esperando un minuto

En el siguiente ejemplo se establece @conversation_group_id en el identificador de grupo de conversación para el siguiente mensaje disponible en ExpenseQueue. Si no queda disponible ningún mensaje en un minuto, GET CONVERSATION GROUP devuelve sin cambiar el valor de @conversation_group_id.

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

C. Obtener un grupo de conversación, devolviendo un valor inmediatamente

En el siguiente ejemplo se establece @conversation_group_id en el identificador de grupo de conversación para el siguiente mensaje disponible en ExpenseQueue. Si no está disponible ningún mensaje, GET CONVERSATION GROUP devuelve inmediatamente @conversation_group_id sin cambiar su valor.

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

Vea también

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