Использование уведомлений запросов

В приложении SQL Server 2005 появились уведомления о запросах — новая функциональная возможность, позволяющая приложению требовать уведомления от SQL Server, когда меняются результаты запроса. Уведомления запросов позволяют разработчикам проектировать приложения, запрашивающие базу данных только тогда, когда произошло изменение информации, ранее полученной этим приложением.

Например, приложение сетевого каталога может кэшировать результаты запроса, содержащего список товаров, предлагаемых для продажи. Приложение представляет каталог на основе кэшированных данных. Когда список товаров для продажи изменяется, обработчик события в приложении получает событие уведомления и сбрасывает кэшированные данные. Когда клиент в следующий раз потребует список товаров для продажи, приложение запрашивает базу данных для получения текущих данных и обновляет подписку на уведомления.

Приложения могут выгодно использовать уведомления запросов, чтобы уменьшить количество проходов по базе данных. Вместо того чтобы писать код, который периодически выполняет заново запрос для получения текущих результатов, разработчики могут проектировать приложения, автоматически уведомляемые, когда результаты запроса устаревают. При работе с уведомлениями запросов приложение выдает команду, содержащую запрос и требование об уведомлении. Приложение кэширует результаты запроса или динамическое содержимое, созданное из результатов запроса. Получив уведомление запроса, приложение очищает кэшированное содержимое. Приложение заново выдает запрос и требование об уведомлении тогда, когда нуждается в обновлении результатов запроса.

Database Engine использует подписки на уведомления, чтобы отслеживать требования об уведомлениях запроса. Если команда содержит требование об уведомлении, база данных регистрирует требование как подписку на уведомление и затем выполняет команду.

Компонент Database Engine использует компонент Service Broker для доставки сообщений с уведомлениями. Следовательно, компонент Service Broker должен быть активен в базе данных, где приложение требует подписку. Функциональная возможность уведомления запроса не требует и не использует службы Notification Services. Уведомления запросов не зависят от уведомлений о событиях.

Чтобы получить сообщение с уведомлением из другой базы данных, не содержащей подписку, в базе данных, содержащей подписку, параметр TRUSTWORTHY должен быть установлен в ON. Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).