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 }  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

WAITFOR
Especifica que la instrucción GET CONVERSATION GROUP espera a que llegue un mensaje a la cola en caso de no haber ningún mensaje.

@conversation_group_id
Es una variable que se utiliza para almacenar el Id. de grupo de conversación devuelto por la instrucción GET CONVERSATION GROUP. 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 se agota el tiempo de espera, GET CONVERSATION GROUP establece la variable @conversation_group_id en NULL.

Comentarios

Importante

Si la instrucción GET CONVERSATION GROUP no es la primera de un lote o un procedimiento almacenado, la instrucción anterior debe terminar en un punto y coma (;), que es el terminador de instrucciones Transact-SQL.

Si la cola especificada en la instrucción GET CONVERSATION GROUP no está disponible, la instrucción genera 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 sucesivas llamadas a GET CONVERSATION GROUP en 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álido 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 el permiso RECEIVE 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 en un minuto no está disponible ningún mensaje, GET CONVERSATION GROUP devuelve @conversation_group_id sin cambiar su valor.

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)