Поделиться через


Запросы очередей

Иногда требуется изучить содержимое очереди в целом. Например, можно узнать, сколько сообщений содержится в очереди, или убедиться в том, что приложение обработало все сообщения, адресованные службе, которая переводится в автономный режим. Может потребоваться выяснить, почему приложение не обрабатывает сообщения.

Чтобы получить эти данные, используйте инструкцию SELECT с именем очереди в качестве таблицы-источника. Инструкция SELECT, выполняемая для очереди, имеет тот же формат, что и инструкция SELECT, служащая для получения данных из представления или таблицы.

ms166127.note(ru-ru,SQL.90).gifПримечание.
Компонент Service Broker разработан так, чтобы сразу несколько агентов чтения очереди могли эффективно получать сообщения из очереди. Тем не менее выполнение инструкции SELECT для очереди может привести к блокировке. Таким образом, используя для очереди инструкцию SELECT, укажите подсказку NOLOCK, чтобы предотвратить блокировку работающих с очередью приложений.

Описание столбцов очереди см. в разделе CREATE QUEUE (Transact-SQL).

Далее представлен пример инструкции SELECT, определяющей число сообщений в очереди ExpenseQueue:

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

Следующая инструкция SELECT позволяет администратору узнать, содержит ли очередь ExpenseQueue какие-либо сообщения, адресованные службе //Adventure-Works.com/AccountsPayable/Expenses:

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. Хотя имя очереди может быть указано в качестве имени таблицы в инструкции SELECT, очередь не может быть целью инструкций INSERT, UPDATE, DELETE и TRUNCATE. SQL Server не позволяет пользователям создавать индексы для очередей.

См. также

Основные понятия

Очереди

Другие ресурсы

SELECT (Transact-SQL)
Message Retention

Справка и поддержка

Получение помощи по SQL Server 2005