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.
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. Cette variable 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. Quand 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. Quand aucun argument schema_name n'est fourni, le schéma par défaut de 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 délai
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 délai 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 (;), marque de fin 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 prochain groupe de conversations que la connexion peut réussir à verrouiller et qui comprend des messages. Par conséquent, 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 affecte à @conversation_group_id l'identificateur du groupe de conversations associé au 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 affecte à @conversation_group_id l'identificateur du groupe de conversations associé au 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 affecte à @conversation_group_id l'identificateur du groupe de conversations associé au prochain message disponible dans ExpenseQueue. Si aucun message n'est disponible, GET CONVERSATION GROUP retourne immédiatement le résultat sans changer la valeur de @conversation_group_id.
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
GET CONVERSATION GROUP @conversation_group_id
FROM AdventureWorks.dbo.ExpenseQueue ;
Voir aussi
Référence
BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)