GET CONVERSATION GROUP (Transact-SQL)

Retourne l'identificateur du groupe de conversations pour le prochain message à recevoir et verrouille le groupe de conversations pour la conversation contenant ce message. L'identificateur du groupe de conversations peut être utilisé pour extraire des informations sur l'état des conversations avant d'extraire le message lui-même.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

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


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

Arguments

  • WAITFOR
    Indique que l'instruction GET CONVERSATION GROUP attend qu'un message arrive dans la file d'attente si celle-ci est actuellement vide.

  • @conversation\_group\_id
    Variable utilisée pour contenir l'ID de groupe de conversations retourné par l'instruction GET CONVERSATION GROUP. Elle doit être de type uniqueidentifier. Si aucun groupe de conversations n'est disponible, elle prend la valeur NULL.

  • FROM
    Spécifie la file d'attente à partir de laquelle le groupe de conversations doit être extrait.

  • database_name
    Nom de la base de données qui contient la file d'attente à partir de laquelle le groupe de conversations doit être extrait. Lorsqu'aucun argument database_name n'est fourni, la base de données active est utilisée par défaut.

  • schema_name
    Nom du schéma auquel appartient la file d'attente à partir de laquelle le groupe de conversations doit être extrait. Lorsqu'aucun argument schema_name n'est fourni, le schéma actif par défaut pour l'utilisateur actuel est utilisé par défaut.

  • queue_name
    Nom de la file d'attente à partir de laquelle le groupe de conversations doit être extrait.

  • TIMEOUT timeout
    Spécifie la durée en millisecondes pendant laquelle Service Broker attend l'arrivée d'un message dans la file d'attente. Cette clause ne peut être utilisée qu'avec la clause WAITFOR. Si une instruction utilisant WAITFOR ne comprend pas cette clause ou si la valeur de timeout est -1, le temps d'attente est illimité. Si le délai expire, GET CONVERSATION GROUP affecte à la variable @conversation\_group\_id la valeur NULL.

Notes

Important

Si l'instruction GET CONVERSATION GROUP n'est pas la première d'un lot ou d'une procédure stockée, l'instruction qui précède doit se terminer par un point-virgule (;), le terminateur d'instruction Transact-SQL.

Si l'instruction GET CONVERSATION GROUP spécifie une file d'attente indisponible, cette instruction échoue et une erreur Transact-SQL se produit.

Cette instruction retourne le groupe de conversations suivant lorsque toutes les conditions suivantes sont vraies :

  • Le groupe de conversations peut être verrouillé.

  • Le groupe de conversations a des messages disponibles dans la file d'attente.

  • Le groupe de conversations a le niveau de priorité le plus élevé de tous les groupes de conversations qui répondent aux critères répertoriés précédemment. Le niveau de priorité d'un groupe de conversations est le plus élevé assigné à toute conversation qui est membre du groupe et qui a des messages dans la file d'attente.

Les appels successifs à GET CONVERSATION GROUP au sein d'une même transaction peuvent verrouiller plus d'un groupe de conversations. Si aucun groupe de conversations n'est disponible, l'instruction retourne la valeur NULL comme identificateur de groupe de conversations.

Lorsque la clause WAITFOR est spécifiée, l'instruction attend pendant le délai spécifié ou jusqu'à ce qu'un groupe de conversations soit disponible. Si la file d'attente est supprimée pendant que l'instruction est en attente, cette dernière retourne immédiatement une erreur.

GET CONVERSATION GROUP n'est pas valide dans une fonction définie par l'utilisateur.

Autorisations

Pour obtenir un identificateur de groupe de conversations à partir d'une file d'attente, l'utilisateur doit détenir l'autorisation RECEIVE sur la file d'attente.

Exemples

A. Obtention d'un groupe de conversations avec attente illimitée

L'exemple suivant attribue à @conversation\_group\_id l'identificateur de groupe de conversations pour le prochain message disponible dans ExpenseQueue. La commande attend jusqu'à ce qu'un message soit disponible.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

WAITFOR (
 GET CONVERSATION GROUP @conversation_group_id
     FROM ExpenseQueue
) ;

B. Obtention d'un groupe de conversations avec attente d'une minute

L'exemple suivant attribue à @conversation\_group\_id l'identificateur de groupe de conversations pour le prochain message disponible dans ExpenseQueue. Si aucun message n'est disponible au bout d'une minute, GET CONVERSATION GROUP retourne le résultat sans changer la valeur de @conversation\_group\_id.

DECLARE @conversation_group_id UNIQUEIDENTIFIER

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

C. Obtention d'un groupe de conversations avec retour immédiat

L'exemple suivant attribue à @conversation\_group\_id l'identificateur de groupe de conversations pour le prochain message disponible dans ExpenseQueue. Si aucun message n'est disponible, GET CONVERSATION GROUP retourne immédiatement le résultat sans modifier @conversation\_group\_id.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

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