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
Importante: |
---|
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)