GET CONVERSATION GROUP (Transact-SQL)

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.


[ WAITFOR ( ]
   GET CONVERSATION GROUP @conversation_group_id
      FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]


<queue> ::=
{
    [ database_name . [ schema_name ] . | schema_name . ] queue_name
}

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 utiliza 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 timeout

Especifica el tiempo, en milisegundos, que espera Service Broker a que llegue un mensaje a la cola. Esta cláusula sólo se puede utilizar con la cláusula WAITFOR. Si una instrucción que utiliza WAITFOR no incluye esta cláusula o timeout 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.

ms178624.note(es-es,SQL.90).gifImportante:
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 próximo grupo de conversación que la conexión puede bloquear correctamente y que tiene mensajes disponibles. Por tanto, 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.

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

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 próximo 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
) ;

A. 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 próximo 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 ;

A. 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 próximo 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 ;

Adiciones de comunidad

AGREGAR
Mostrar: