GET CONVERSATION GROUP (Transact-SQL)

Restituisce l'identificatore del gruppo di conversazioni per il messaggio successivo da ricevere e blocca il gruppo di conversazioni per la conversazione contenente il messaggio. L'identificatore del gruppo di conversazioni può essere utilizzato per recuperare le informazioni sullo stato della conversazione prima di recuperare il messaggio stesso.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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


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

Argomenti

  • WAITFOR
    Specifica che l'istruzione GET CONVERSATION GROUP deve rimanere in attesa dell'arrivo di un messaggio nella coda, se non sono presenti messaggi.

  • @conversation\_group\_id
    Variabile utilizzata per archiviare l'ID del gruppo di conversazioni restituito dall'istruzione GET CONVERSATION GROUP. La variabile deve essere di tipo uniqueidentifier. Se non sono disponibili gruppi di conversazione, la variabile viene impostata su NULL.

  • FROM
    Specifica la coda da cui recuperare il gruppo di conversazioni.

  • database_name
    Nome del database contenente la coda da cui recuperare il gruppo di messaggi. Se non viene specificato un valore per database_name, viene utilizzato per impostazione predefinita il database corrente.

  • schema_name
    Nome dello schema proprietario della coda da cui recuperare il gruppo di messaggi. Se non viene specificato un valore per schema_name, viene utilizzato per impostazione predefinita lo schema predefinito dell'utente corrente.

  • queue_name
    Nome della coda da cui recuperare il gruppo di conversazioni.

  • TIMEOUT timeout
    Specifica la quantità di tempo, in millisecondi, che Service Broker attende l'arrivo di un messaggio nella coda. È possibile utilizzare questa clausola solo insieme alla clausola WAITFOR. Se un'istruzione che utilizza l'istruzione WAITFOR non include questa clausola oppure se timeout è -1, il tempo di attesa è illimitato. Se il timeout scade, l'istruzione GET CONVERSATION GROUP imposta la variabile @conversation\_group\_id su NULL.

Osservazioni

Nota importanteImportante

Se l'istruzione GET CONVERSATION GROUP non è la prima istruzione in un batch o in una stored procedure, l'istruzione precedente deve terminare con un punto e virgola (;), ovvero il terminatore di istruzioni Transact-SQL.

Se la coda specificata nell'istruzione GET CONVERSATION GROUP non è disponibile, l'istruzione viene interrotta con un errore Transact-SQL.

Questa istruzione restituisce il gruppo di conversazioni successivo in cui tutte le condizioni seguenti sono vere:

  • Il gruppo di conversazioni può essere correttamente bloccato.

  • Nella coda del gruppo di conversazioni sono disponibili messaggi.

  • Il gruppo di conversazioni ha il livello di priorità più elevato di tutti i gruppi di conversazioni che soddisfano i criteri elencati in precedenza. Il livello di priorità di un gruppo di conversazioni corrisponde a quello più elevato assegnato a qualsiasi conversazione membro del gruppo e per cui sono presenti messaggi nella coda.

Le chiamate all'istruzione GET CONVERSATION GROUP all'interno della stessa transazione potrebbero bloccare più di un gruppo di conversazioni. Se non è disponibile alcun gruppo di conversazioni, l'istruzione restituisce NULL come identificatore del gruppo di conversazioni.

Se si specifica la clausola WAITFOR, l'istruzione rimane in attesa per il periodo di timeout specificato oppure fino a quando non è disponibile un gruppo di conversazioni. Se la coda viene eliminata durante l'attesa dell'istruzione, viene restituito un errore.

GET CONVERSATION GROUP non è valida in una funzione definita dall'utente.

Autorizzazioni

Per recuperare un identificatore di un gruppo di conversazioni da una coda, l'utente corrente deve disporre dell'autorizzazione RECEIVE per la coda.

Esempi

A. Recupero di un gruppo di conversazioni e attesa illimitata

Nell'esempio seguente @conversation\_group\_id viene impostato sull'identificatore del gruppo di conversazioni per il successivo messaggio disponibile in ExpenseQueue. Il comando rimane in attesa finché non è disponibile un messaggio.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

WAITFOR (
 GET CONVERSATION GROUP @conversation_group_id
     FROM ExpenseQueue
) ;

B. Recupero di un gruppo di conversazioni e attesa di un minuto

Nell'esempio seguente @conversation\_group\_id viene impostato sull'identificatore del gruppo di conversazioni per il successivo messaggio disponibile in ExpenseQueue. Se nessun messaggio diventa disponibile entro un minuto, GET CONVERSATION GROUP restituisce il valore di @conversation\_group\_id senza modificarlo.

DECLARE @conversation_group_id UNIQUEIDENTIFIER

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

C. Recupero di un gruppo di conversazioni e restituzione immediata del valore

Nell'esempio seguente @conversation\_group\_id viene impostato sull'identificatore del gruppo di conversazioni per il successivo messaggio disponibile in ExpenseQueue. Se non è disponibile alcun messaggio, GET CONVERSATION GROUP restituisce immediatamente il valore di @conversation\_group\_id senza modificarlo.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

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