GET CONVERSATION GROUP (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Geeft de conversatiegroepidentificatie terug voor het volgende bericht dat ontvangen wordt, en vergrendelt de gespreksgroep voor het gesprek dat het bericht bevat. De conversatiegroepidentificatie kan worden gebruikt om conversatiestatusinformatie op te halen voordat het bericht zelf wordt opgehaald.

Transact-SQL syntaxis-conventies

Syntax

[ WAITFOR ( ]  
   GET CONVERSATION GROUP @conversation_group_id  
      FROM <queue>  
[ ) ] [ , TIMEOUT timeout ]  
[ ; ]  
  
<queue> ::=  
{ database_name.schema_name.queue_name | schema_name.queue_name | queue_name }  

Arguments

WAITFOR
Specificeert dat de GET CONVERSATION GROUP instructie wacht tot een bericht in de wachtrij aankomt als er momenteel geen berichten aanwezig zijn.

@conversation_group_id
Is een variabele die wordt gebruikt om de gespreksgroep-ID op te slaan die door de GET CONVERSATION GROUP instructie wordt teruggegeven. De variabele moet van type uniqueidentifier zijn. Als er geen gespreksgroepen beschikbaar zijn, wordt de variabele op NULL gezet.

FROM
Specificeert de wachtrij om de gespreksgroep te halen.

database_name
Is de naam van de database die de wachtrij bevat waaruit de gespreksgroep moet komen. Wanneer er geen database_name wordt opgegeven, schakelt standaard over naar de huidige database.

schema_name
Is de naam van het schema dat de wachtrij bezit om de gespreksgroep vandaan te halen. Wanneer er geen schema_name wordt gegeven, schakelt het standaard over naar het standaardschema voor de huidige gebruiker.

queue_name
Dat is de naam van de wachtrij waar je de gespreksgroep vandaan haalt.

TIMEOUT timeout
Specificeert de tijd, in milliseconden, waarin Service Broker wacht tot een bericht in de wachtrij arriveert. Deze clausule mag alleen worden gebruikt samen met de WAITFOR-clausule. Als een statement dat WAITFOR gebruikt deze clausule niet bevat of de time-out -1 is, is de wachttijd onbeperkt. Als de timeout verloopt, GET CONVERSATION GROUP zet de @conversation_group_id variabele op NULL.

Remarks

Belangrijk

Als de GET CONVERSATION GROUP instructie niet de eerste instructie is in een batch of opgeslagen procedure, moet de voorgaande stelling worden beëindigd met een puntkomma (;), de terminator van de Transact-SQL statement.

Als de in de GET CONVERSATION GROUP instructie gespecificeerde wachtrij niet beschikbaar is, faalt de instructie met een Transact-SQL fout.

Deze uitspraak geeft de volgende gespreksgroep terug waarbij het volgende waar is:

  • De gespreksgroep kan succesvol worden vergrendeld.

  • De gespreksgroep heeft berichten beschikbaar in de wachtrij.

  • De gespreksgroep heeft het hoogste prioriteitsniveau van alle gespreksgroepen die aan de eerder genoemde criteria voldoen. Het prioriteitsniveau van een gespreksgroep is het hoogste prioriteitsniveau dat wordt toegekend aan elk gesprek dat lid is van de groep en berichten in de wachtrij heeft.

Opeenvolgende oproepen binnen GET CONVERSATION GROUP dezelfde transactie kunnen meer dan één gespreksgroep vergrendelen. Als er geen gespreksgroep beschikbaar is, geeft de instructie NULL als de gespreksgroepidentificatie terug.

Wanneer de WAITFOR-clausule is gespecificeerd, wacht de instructie op de gespecificeerde time-out, of totdat er een gespreksgroep beschikbaar is. Als de wachtrij wordt verwijderd terwijl de instructie wacht, geeft de instructie onmiddellijk een foutmelding terug.

GET CONVERSATION GROUP is niet geldig in een door de gebruiker gedefinieerde functie.

Permissions

Om een conversatiegroepidentificatie uit een wachtrij te krijgen, moet de huidige gebruiker toestemming hebben RECEIVE voor de wachtrij.

Examples

A. Een gespreksgroep krijgen, eindeloos wachten

Het volgende voorbeeld zet @conversation_group_id de conversatiegroepidentificatie voor het volgende beschikbare bericht op ExpenseQueue. Het commando wacht tot er een bericht beschikbaar is.

DECLARE @conversation_group_id UNIQUEIDENTIFIER ;  
  
WAITFOR (  
 GET CONVERSATION GROUP @conversation_group_id  
     FROM ExpenseQueue  
) ;  

B. Een gespreksgroep krijgen, één minuut wachten

Het volgende voorbeeld zet @conversation_group_id de conversatiegroepidentificatie voor het volgende beschikbare bericht op ExpenseQueue. Als er binnen één minuut geen bericht beschikbaar is, GET CONVERSATION GROUP geeft het terug zonder de waarde van @conversation_group_idte veranderen.

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

C. Een gespreksgroep krijgen, meteen terugkomen

Het volgende voorbeeld zet @conversation_group_id de conversatiegroepidentificatie voor het volgende beschikbare bericht op ExpenseQueue. Als er geen bericht beschikbaar is, keert GET CONVERSATION GROUP onmiddellijk terug zonder te wijzigen @conversation_group_id.

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

Zie ook

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