CREATE QUEUE (Transact-SQL)
Erstellt eine neue Warteschlange in einer Datenbank. Ordnet gespeicherte Nachrichten in einer Warteschlange an. Wenn eine Nachricht für einen Dienst eintrifft, platziert Service Broker die Nachricht in der dem Dienst zugeordneten Warteschlange.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE QUEUE <object>
[ WITH
[ STATUS = { ON | OFF } [ , ] ]
[ RETENTION = { ON | OFF } [ , ] ]
[ ACTIVATION (
[ STATUS = { ON | OFF } , ]
PROCEDURE_NAME = <procedure> ,
MAX_QUEUE_READERS = max_readers ,
EXECUTE AS { SELF | 'user_name' | OWNER }
) ]
]
[ ON { filegroup | [ DEFAULT ] } ]
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
queue_name
}
<procedure> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
stored_procedure_name
}
Argumente
- database_name (object)
Der Name der Datenbank, in der die neue Warteschlange erstellt werden soll. database_name muss den Namen einer vorhandenen Datenbank angeben. Wird database_name nicht bereitgestellt, wird die Warteschlange in der aktuellen Datenbank erstellt.
- schema_name (object)
Der Name des Schemas, zu dem die neue Warteschlange gehört. Standardmäßig handelt es sich bei dem Schema um das Standardschema für den Benutzer, der die Anweisung ausführt. Wird die CREATE QUEUE-Anweisung von einem Mitglied der festen Serverrolle sysadmin oder einem Mitglied der festen Datenbankrollen db_dbowner oder db_ddladmin in der durch database_name angegebenen Datenbank ausgeführt, kann schema_name ein anderes als das der Anmeldung der aktuellen Verbindung zugeordnete Schema angeben. Andernfalls muss es sich bei dem angegebenen Wert für schema_name um das Standardschema für den Benutzer handeln, der die Anweisung ausführt.
- queue_name
Der Name der zu erstellenden Warteschlange. Dieser Name muss den Richtlinien für SQL Server-Bezeichner entsprechen.
- STATUS (Warteschlange)
Gibt an, ob die Warteschlange verfügbar ist (ON) oder nicht (OFF). Ist die Warteschlange nicht verfügbar, können der Warteschlange keine Nachrichten hinzugefügt oder aus ihr entfernt werden. Sie können die Warteschlange im nicht verfügbaren Status erstellen, um zu bewirken, dass Nachrichten erst dann in der Warteschlange ankommen, wenn die Warteschlange mit einer ALTER QUEUE-Anweisung zur Verfügung gestellt wird. Wird diese Klausel nicht angegeben, ist die Standardeinstellung ON, und die Warteschlange ist verfügbar.
RETENTION
Gibt die Beibehaltungseinstellung für die Warteschlange an. Ist RETENTION = ON, werden alle Nachrichten, die für Konversationen mit dieser Warteschlange gesendet oder empfangen werden, in der Warteschlange beibehalten, bis die Konversationen beendet sind. Dies ermöglicht es Ihnen, Nachrichten zu Überwachungszwecken oder zur Ausführung von kompensierenden Transaktionen beim Auftreten eines Fehlers beizubehalten. Wird diese Klausel nicht angegeben, wird die Beibehaltungseinstellung standardmäßig auf OFF festgelegt.Hinweis: Das Festlegen von RETENTION = ON kann die Leistung reduzieren. Diese Einstellung sollte nur verwendet werden, wenn sie für die Anwendung erforderlich ist. Weitere Informationen finden Sie unter Message Retention.
- ACTIVATION
Gibt Informationen über die gespeicherte Prozedur an, die für die Verarbeitung von Nachrichten in dieser Warteschlange aktiviert werden soll.
- STATUS (Aktivierung)
Gibt an, ob Service Broker die gespeicherte Prozedur aktiviert. Ist STATUS = ON, startet die Warteschlange die mit PROCEDURE_NAME angegebene gespeicherte Prozedur, wenn die Anzahl der zurzeit ausgeführten Prozeduren kleiner als MAX_QUEUE_READERS ist und wenn Nachrichten schneller in der Warteschlange ankommen, als die gespeicherten Prozeduren Nachrichten empfangen. Ist STATUS = OFF, aktiviert die Warteschlange die gespeicherte Prozedur nicht. Wird diese Klausel nicht angegeben, ist die Standardeinstellung ON.
- PROCEDURE_NAME = <Prozedur>
Gibt den Namen der gespeicherten Prozedur an, die für die Verarbeitung von Nachrichten in dieser Warteschlange aktiviert werden soll. Bei diesem Wert muss es sich um einen SQL Server-Bezeichner handeln. Weitere Informationen finden Sie unter Understanding When Activation Occurs.
- database_name(procedure)
Der Name der Datenbank, die die gespeicherte Prozedur enthält.
- schema_name(procedure)
Der Name des Schemas, das die gespeicherte Prozedur enthält.
- procedure_name
Der Name der gespeicherten Prozedur.
- MAX_QUEUE_READERS **=**max_readers
Gibt die maximale Anzahl von Instanzen der gespeicherten Aktivierungsprozedur an, die von der Warteschlange gleichzeitig gestartet werden. Der Wert von max_readers muss eine Zahl zwischen 0 und 32767 sein.
- EXECUTE AS
Gibt das Datenbank-Benutzerkonto von SQL Server an, unter dem die gespeicherte Aktivierungsprozedur ausgeführt wird. SQL Server muss in der Lage sein, die Berechtigungen dieses Benutzers zu dem Zeitpunkt, an dem die Warteschlange die gespeicherte Prozedur aktiviert, zu überprüfen. Bei einem Domänenbenutzer muss der Server mit der Domäne verbunden sein, wenn die Prozedur aktiviert wird. Andernfalls erzeugt die Aktivierung einen Fehler. Bei einem SQL Server-Benutzer kann der Server immer die Berechtigungen überprüfen.
- SELF
Gibt an, dass die gespeicherte Prozedur als der aktuelle Benutzer ausgeführt wird. (Der Datenbankprinzipal, der diese CREATE QUEUE-Anweisung ausführt.)
- 'user_name'
Der Name des Benutzers, als der die gespeicherte Prozedur ausgeführt wird. Der user_name-Parameter muss ein gültiger SQL Server-Benutzer sein, der als SQL Server-Bezeichner angegeben wird. Der aktuelle Benutzer muss über die IMPERSONATE-Berechtigung für den mit user_name angegebenen Benutzer verfügen.
- OWNER
Gibt an, dass die gespeicherte Prozedur als der Besitzer der Warteschlange ausgeführt wird.
- ON filegroup | [ DEFAULT ]
Gibt die SQL Server-Dateigruppe an, in der diese Warteschlange erstellt werden soll. Sie können mit dem filegroup-Parameter eine Dateigruppe identifizieren oder mit dem DEFAULT-Bezeichner die Standarddateigruppe für die Service Broker-Datenbank verwenden. Im Kontext dieser Klausel ist DEFAULT kein Schlüsselwort und muss als Bezeichner begrenzt sein. Wird keine Dateigruppe angegeben, verwendet die Warteschlange die Standarddateigruppe für die Datenbank.
Hinweise
Eine Warteschlange kann das Ziel einer SELECT-Anweisung sein. Der Inhalt einer Warteschlange kann jedoch nur mithilfe von Anweisungen geändert werden, die für Service Broker-Konversationen verwendet werden, wie beispielsweise SEND, RECEIVE und END CONVERSATION. Eine Warteschlange kann nicht das Ziel einer INSERT-, UPDATE-, DELETE- oder TRUNCATE-Anweisung sein.
Eine Warteschlange kann kein temporäres Objekt sein. Daher sind Warteschlangennamen, die mit # beginnen, ungültig.
Das Erstellen einer Warteschlange im inaktiven Status ermöglicht es Ihnen, die Infrastruktur für einen Dienst einzurichten, bevor der Empfang von Nachrichten in der Warteschlange zugelassen wird.
Service Broker beendet gespeicherte Aktivierungsprozeduren nicht, wenn sich keine Nachrichten in der Warteschlange befinden. Eine gespeicherte Aktivierungsprozedur sollte beendet werden, wenn eine kurze Zeit lang keine Nachrichten in der Warteschlange verfügbar sind.
Berechtigungen für die gespeicherte Aktivierungsprozedur werden überprüft, wenn Service Broker die gespeicherte Prozedur aktiviert, nicht, wenn die Warteschlange erstellt wird. Die CREATE QUEUE-Anweisung überprüft nicht, ob der in der EXECUTE AS-Klausel angegebene Benutzer über die Berechtigung verfügt, die in der PROCEDURE NAME-Klausel angegebene gespeicherte Prozedur auszuführen.
Ist eine Warteschlange nicht verfügbar, speichert Service Broker Nachrichten für Dienste, die die Warteschlange verwenden, in der Übertragungswarteschlange für die Datenbank. Die sys.transmission_queue-Katalogsicht stellt eine Sicht der Übertragungswarteschlange bereit.
Eine Warteschlange ist ein Objekt, dessen Besitzer ein Schema ist. Warteschlangen werden in der sys.objects-Katalogsicht angezeigt.
In der folgenden Tabelle werden die Spalten in einer Warteschlange aufgelistet.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
status |
tinyint |
Status der Nachricht. Für Nachrichten, die vom RECEIVE-Befehl zurückgegeben werden, ist der Status immer 1. Nachrichten in der Warteschlange können einen der folgenden Werte enthalten: 0 = Nachricht empfangen 1 = Bereit 2 = Noch nicht abgeschlossen 3 = Gesendete Nachricht wurde beibehalten |
priority |
tinyint |
Reserviert für zukünftige Verwendung |
queuing_order |
bigint |
Fortlaufende Nummer der Nachricht innerhalb der Warteschlange. |
conversation_group_id |
uniqueidentifier |
Bezeichner für die Konversationsgruppe, zu der diese Nachricht gehört. |
conversation_handle |
uniqueidentifier |
Handle der Konversation, von der diese Nachricht ein Teil ist. |
message_sequence_number |
bigint |
Sequenznummer der Nachricht innerhalb der Konversation. |
service_name |
nvarchar(512) |
Name des Diensts, an den die Konversation gerichtet ist. |
service_id |
int |
SQL Server-Objektbezeichner des Diensts, an den die Konversation gerichtet ist. |
service_contract_name |
nvarchar(256) |
Name des Vertrags, dem die Konversation entspricht. |
service_contract_id |
int |
SQL Server-Objektbezeichner des Vertrags, dem die Konversation entspricht. |
message_type_name |
nvarchar(256) |
Name des Nachrichtentyps, der die Nachricht beschreibt. |
message_type_id |
int |
SQL Server-Objektbezeichner des Nachrichtentyps, der die Nachricht beschreibt. |
validation |
nchar(2) |
Für die Nachricht verwendete Überprüfung. E = Leer N = Keiner X = XML |
message_body |
varbinary(MAX) |
Inhalt der Nachricht. |
message_id |
uniqueidentifier |
Eindeutiger Bezeichner für die Nachricht. |
Berechtigungen
Über die Berechtigung zum Erstellen einer Warteschlange verfügen standardmäßig die Mitglieder der festen Datenbankrollen db_ddladmin oder db_owner sowie die Mitglieder der festen Serverrolle sysadmin.
Über die REFERENCES-Berechtigung für eine Warteschlange verfügen standardmäßig der Besitzer der Warteschlange, die Mitglieder der festen Datenbankrollen db_ddladmin oder db_owner sowie die Mitglieder der festen Serverrolle sysadmin.
RECEIVE-Berechtigungen für eine Warteschlange liegen standardmäßig beim Besitzer der Warteschlange, bei Mitgliedern der festen Datenbankrolle db_owner und bei Mitgliedern der festen Serverrolle sysadmin.
Beispiele
A. Erstellen einer Warteschlange ohne Parameter
Im folgenden Beispiel wird eine Warteschlange erstellt, die für den Empfang von Nachrichten verfügbar ist. Für die Warteschlange wird keine gespeicherte Aktivierungsprozedur angegeben.
CREATE QUEUE ExpenseQueue ;
B. Erstellen einer nicht verfügbaren Warteschlange
Im folgenden Beispiel wird eine Warteschlange erstellt, die nicht für den Empfang von Nachrichten verfügbar ist. Für die Warteschlange wird keine gespeicherte Aktivierungsprozedur angegeben.
CREATE QUEUE ExpenseQueue WITH STATUS=OFF ;
C. Erstellen einer Warteschlange und Angeben von internen Aktivierungsinformationen
Im folgenden Beispiel wird eine Warteschlange erstellt, die für den Empfang von Nachrichten verfügbar ist. Die Warteschlange startet die gespeicherte Prozedur expense_procedure
, wenn eine Nachricht in der Warteschlange angeordnet wird. Die gespeicherte Prozedur wird als der Benutzer ExpenseUser
ausgeführt. Die Warteschlange startet ein Maximum von 5
Instanzen der gespeicherten Prozedur.
CREATE QUEUE ExpenseQueue
WITH STATUS=ON,
ACTIVATION (
PROCEDURE_NAME = expense_procedure,
MAX_QUEUE_READERS = 5,
EXECUTE AS 'ExpenseUser' ) ;
D. Erstellen einer Warteschlange in einer bestimmten Dateigruppe
Im folgenden Beispiel wird eine Warteschlange in der ExpenseWorkFileGroup
-Dateigruppe erstellt.
CREATE QUEUE ExpenseQueue
ON ExpenseWorkFileGroup ;
E. Erstellen einer Warteschlange mit mehreren Parametern
Im folgenden Beispiel wird eine Warteschlange in der DEFAULT
-Dateigruppe erstellt. Die Warteschlange ist nicht verfügbar. Nachrichten werden in der Warteschlange beibehalten, bis die Konversation, zu der sie gehören, endet. Wenn die Warteschlange über ALTER QUEUE zur Verfügung gestellt wird, aktiviert die Warteschlange die gespeicherte Prozedur AdventureWorks.dbo.expense_procedure
für die Verarbeitung von Nachrichten. Die gespeicherte Prozedur wird als der Benutzer ausgeführt, der die CREATE QUEUE
-Anweisung ausgeführt hat. Die Warteschlange startet ein Maximum von 10
Instanzen der gespeicherten Prozedur.
CREATE QUEUE ExpenseQueue
WITH STATUS = OFF,
RETENTION = ON,
ACTIVATION (
PROCEDURE_NAME = AdventureWorks.dbo.expense_procedure,
MAX_QUEUE_READERS = 10,
EXECUTE AS SELF )
ON [DEFAULT] ;
Siehe auch
Verweis
ALTER QUEUE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
DROP QUEUE (Transact-SQL)
RECEIVE (Transact-SQL)
EVENTDATA (Transact-SQL)
Andere Ressourcen
Warteschlangen
Service Broker-Lernprogramme
Erstellen von Anwendungen mit Service Broker
Service Broker Activation
Internal Activation Context