Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Managed Instance
Gibt den Bezeichner der Konversationsgruppe für die nächste zu empfangende Nachricht zurück und sperrt die Konversationsgruppe für die Konversation, die die Nachricht enthält. Der Konversationsgruppenbezeichner kann zum Abrufen der Informationen zum Konversationsstatus vor dem Abrufen der eigentlichen Nachricht verwendet werden.
Transact-SQL-Syntaxkonventionen
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 }
Argumente
WAITFOR
Spezifiziert, dass die GET CONVERSATION GROUP Anweisung darauf wartet, dass eine Nachricht in der Warteschlange eintrifft, wenn derzeit keine Nachrichten vorhanden sind.
@conversation_group_id
Ist eine Variable, die zur Speicherung der von der Statement GET CONVERSATION GROUP zurückgegebenen Gesprächsgruppen-ID verwendet wird. Die Variable muss vom Typ uniqueidentifier sein. Sind keine Konversationsgruppen verfügbar, wird die Variable auf NULL festgelegt.
FROM
Gibt die Warteschlange an, aus der die Konversationsgruppe abgerufen werden soll.
database_name
Der Name der Datenbank, die die Warteschlange enthält, aus der die Konversationsgruppe abgerufen werden soll. Wenn database_name nicht bereitgestellt wird, wird standardmäßig die aktuelle Datenbank verwendet.
schema_name
Der Name des Schemas, das die Warteschlange besitzt, aus der die Konversationsgruppe abgerufen werden soll. Wenn schema_name nicht angegeben wird, wird standardmäßig das Standardschema für den aktuellen Benutzer verwendet.
queue_name
Der Name der Warteschlange, aus der die Konversationsgruppe abgerufen werden soll.
TIMEOUT-Auszeit
Gibt die Zeitdauer (in Millisekunden) an, die Service Broker auf das Eintreffen einer Nachricht in der Warteschlange wartet. Diese Klausel darf nur zusammen mit der WAITFOR-Klausel verwendet werden. Wenn eine Anweisung, die WAITFOR verwendet, diese Klausel nicht einschließt, oder wenn timeout den Wert -1 aufweist, unterliegt die Wartezeit keiner Begrenzung. Wenn der Timeout abläuft, GET CONVERSATION GROUP setzt die @conversation_group_id Variable auf NULL.
Hinweise
Wichtig
Ist die GET CONVERSATION GROUP Anweisung nicht die erste Anweisung in einem Batch- oder gespeicherten Verfahren, muss die vorhergehende Anweisung mit einem Semikolon (;), dem Transact-SQL Anweisungsterminator, beendet werden.
Wenn die in der Anweisung GET CONVERSATION GROUP angegebene Warteschlange nicht verfügbar ist, scheitert die Anweisung mit einem Transact-SQL-Fehler.
Diese Anweisung gibt die nächste Konversationsgruppe zurück, wobei Folgendes gilt:
Die Konversationsgruppe kann erfolgreich gesperrt werden.
Die Konversationsgruppe verfügt in der Warteschlange über Nachrichten.
Die Konversationsgruppe weist von allen Konversationsgruppen, die die zuvor genannten Kriterien erfüllen, die höchste Prioritätsebene auf. Die Prioritätsebene einer Konversationsgruppe ist die höchste Prioritätsebene, die einer Konversation zugeordnet ist, die der Gruppe angehört und in der Warteschlange Nachrichten aufweist.
Aufeinanderfolgende Anrufe innerhalb GET CONVERSATION GROUP derselben Transaktion können mehr als eine Gesprächsgruppe sperren. Steht keine Konversationsgruppe zur Verfügung, gibt die Anweisung NULL als Bezeichner der Konversationsgruppe zurück.
Wenn die WAITFOR-Klausel angegeben wird, wartet die Anweisung bis zum Ablauf des angegebenen Timeouts oder so lange, bis eine Konversationsgruppe verfügbar ist. Wird die Warteschlange gelöscht, während die Anweisung wartet, gibt die Anweisung sofort einen Fehler zurück.
GET CONVERSATION GROUP ist in einer benutzerdefinierten Funktion nicht gültig.
Berechtigungen
Um eine Konversationsgruppen-Identifikator aus einer Warteschlange zu erhalten, muss der aktuelle Benutzer eine Berechtigung für die Warteschlange haben RECEIVE .
Beispiele
A. Abrufen einer Konversationsgruppe ohne Begrenzung der Wartezeit
Im folgenden Beispiel wird @conversation_group_id auf den Konversationsgruppenbezeichner für die nächste verfügbare Nachricht in ExpenseQueue festgelegt. Der Befehl wartet so lange, bis eine Nachricht verfügbar ist.
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue
) ;
B. Abrufen einer Konversationsgruppe mit einer Wartezeit von einer Minute
Im folgenden Beispiel wird @conversation_group_id auf den Konversationsgruppenbezeichner für die nächste verfügbare Nachricht in ExpenseQueue festgelegt. Wenn innerhalb einer Minute keine Nachricht verfügbar ist, wird ohne Änderung des Wertes von @conversation_group_idzurückgegeben. GET CONVERSATION GROUP
DECLARE @conversation_group_id UNIQUEIDENTIFIER
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue ),
TIMEOUT 60000 ;
C. Abrufen einer Konversationsgruppe mit unmittelbarer Rückgabe
Im folgenden Beispiel wird @conversation_group_id auf den Konversationsgruppenbezeichner für die nächste verfügbare Nachricht in ExpenseQueue festgelegt. Wenn keine Nachricht verfügbar ist, wird GET CONVERSATION GROUP sofort ohne Änderung des Werts von @conversation_group_id zurückgegeben.
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
GET CONVERSATION GROUP @conversation_group_id
FROM AdventureWorks.dbo.ExpenseQueue ;
Weitere Informationen
BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)