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.

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. Tale 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 si specifica 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 si specifica 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'argomento 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

ms178624.note(it-it,SQL.90).gifImportante:
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 (;), ossia il terminatore di istruzioni Transact-SQL.

Se lo stato della 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 che la connessione è in grado di bloccare correttamente e che include messaggi disponibili. È pertanto possibile che successive chiamate all'istruzione GET CONVERSATION GROUP all'interno della stessa transazione blocchino 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 l'argomento @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 l'argomento @conversation_group_id viene impostato sull'identificatore del gruppo di conversazioni per il successivo messaggio disponibile in ExpenseQueue. Se nessun messaggio risulta 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 l'argomento @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 subito il valore di @conversation_group_id senza modificarlo.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;

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

Vedere anche

Riferimento

BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)

Altre risorse

Conversation Group Locks

Guida in linea e informazioni

Assistenza su SQL Server 2005