Abfragen von Warteschlangen

Manchmal kann es notwendig sein, den gesamten Inhalt einer Warteschlange zu überprüfen. Möglicherweise möchten Sie wissen, wie viele Nachrichten die Warteschlange enthält, oder Sie möchten sicherstellen, dass die Anwendung alle Nachrichten für einen Dienst verarbeitet hat, den Sie offline schalten möchten. Möglicherweise müssen Sie herausfinden, warum Nachrichten nicht von einer Anwendung verarbeitet werden.

Verwenden Sie zum Erhalt dieser Informationen den Namen der Warteschlange als Quelltabelle einer SELECT-Anweisung. Eine SELECT-Anweisung für eine Warteschlange weist das gleiche Format auf wie eine SELECT-Anweisung für eine Sicht oder Tabelle.

HinweisHinweis

Service Broker ermöglicht mehreren Warteschlangenlesern, Nachrichten effizient von einer Warteschlange zu empfangen. Allerdings kann eine SELECT-Anweisung für eine Warteschlange zur Sperrung führen. Wenn Sie eine SELECT-Anweisung für eine Warteschlange verwenden, geben Sie den NOLOCK-Hinweis an, um zu vermeiden, dass Anwendungen gesperrt werden, die die Warteschlange verwenden.

Eine Beschreibung der Spalten in einer Warteschlange finden Sie unter CREATE QUEUE (Transact-SQL).

Im folgenden Beispiel wird eine SELECT-Anweisung zum Ermitteln der Anzahl von Nachrichten in der Warteschlange ExpenseQueue dargestellt:

SELECT COUNT(*) FROM dbo.ExpenseQueue WITH (NOLOCK) ;

Die folgende SELECT-Anweisung informiert den Administrator darüber, ob die Warteschlange ExpenseQueue Nachrichten für den Dienst //Adventure-Works.com/AccountsPayable/Expenses enthält.

IF EXISTS(SELECT * FROM dbo.ExpenseQueue WITH (NOLOCK) WHERE
          service_name = '//Adventure-Works.com/AccountsPayable/Expenses')
  PRINT 'The queue contains messages for ' +
        '//Adventure-Works.com/AccountsPayable/Expenses'
ELSE
  PRINT 'The queue does not contain messages for ' +
        '//Adventure-Works.com/AccountsPayable/Expenses' ;

Service Broker verwaltet Aktualisierungen von Warteschlangen. Der Name einer Warteschlange kann zwar statt eines Tabellennamens in einer SELECT-Anweisung verwendet werden, eine Warteschlange kann jedoch nicht das Ziel einer INSERT-, UPDATE-, DELETE- oder TRUNCATE-Anweisung sein. SQL Server ermöglicht dem Benutzer nicht das Erstellen von Indizes für Warteschlangen.