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.
Convenciones de sintaxis de Transact-SQL
Sintaxis
[ WAITFOR ( ]
GET CONVERSATION GROUP @conversation_group_id
FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]
<queue> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] queue_name
}
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 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 solo 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.
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 ;