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. 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
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 (;), 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 AdventureWorks2008R2.dbo.ExpenseQueue ;
Vedere anche