Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Изменения: 14 апреля 2006 г.
Уведомления о запросах построены на механизме отслеживания изменений, при помощи которого компонент Database Engine обслуживает индексированные представления. Требования и ограничения, предъявляемые к инструкциям в запросах с уведомлениями, аналогичны тем, что предъявляются к индексированным представлениям.
Значения параметров SET
При выполнении инструкции SELECT с запросом уведомления для соединения, с которого поступил запрос, должны быть установлены следующие параметры:
- ANSI_NULLS ON
- ANSI_PADDING ON
- ANSI_WARNINGS ON
- CONCAT_NULL_YIELDS_NULL ON
- QUOTED_IDENTIFIER ON
- NUMERIC_ROUNDABORT OFF
- ARITHABORT ON
Примечание. |
|---|
| В SQL Server 2005 при установке параметра ANSI_WARNINGS в состояние ON выполняется неявная установка параметра ARITHABORT в состояние ON, если уровень совместимости базы данных равен 90. Если же уровень равен 80 или меньше, параметр ARITHABORT явным образом должен быть установлен в значение ON. |
Если эти параметры соответствующим образом не установлены, уведомление создается немедленно после выполнения инструкции SELECT. Если уведомление активно, то для соединения, от которого поступила команда, вызвавшая срабатывание уведомления, должна быть также выполнена установка указанных параметров. В противном случае команда завершится ошибкой языка Transact-SQL.
Если инструкция содержится в хранимой процедуре, то при создании этой хранимой процедуры должны быть указаны параметры ANSI_NULLS и QUOTED_IDENTIFIER. Дополнительные сведения см. в разделах SET ANSI_NULLS (Transact-SQL) и SET QUOTED_IDENTIFIER (Transact-SQL).
Инструкции для уведомлений
В общем случае в качестве запроса с уведомлением может быть указан любой запрос, применимый для создания индексированного представления. Уведомления могут быть настроены для следующих инструкций:
- SELECT
Требования и ограничения, предъявляемые к инструкции SELECT, см. в подразделе «Поддерживаемые инструкции SELECT» ниже. Дополнительные сведения об инструкции SELECT см. в разделе SELECT (Transact-SQL). - EXECUTE
В этом случае SQL Server регистрирует уведомление на выполняемую команду, а не на саму инструкцию EXECUTE. Команда должна соответствовать требованиям, предъявляемым к инструкции SELECT. Дополнительные сведения об инструкции EXECUTE см. в разделе EXECUTE (Transact-SQL).
Если регистрируемая команда состоит из нескольких инструкций, компонент Database Engine создает уведомления для каждой из них.
Поддерживаемые инструкции SELECT
Уведомления о запросах поддерживаются для инструкций SELECT, удовлетворяющих следующим требованиям.
- Отображаемые столбцы в инструкции SELECT должны быть перечислены явно, а имена таблиц должны указываться полными именами, состоящими из двух частей. Обратите внимание на то, что все таблицы, на которые ссылается инструкция, должны находиться в одной и той же базе данных.
- В инструкции для указания столбцов нельзя применять звездочку (*) и синтаксис вида имя_таблицы.*.
- В инструкции не могут содержаться безымянные столбцы и повторяющиеся имена столбцов.
- Инструкция должна ссылаться на базовую таблицу.
- Инструкция не должна ссылаться на таблицы с вычисляемыми столбцами.
- Отображаемые столбцы в инструкции SELECT не могут содержать статистические выражения, кроме случаев употребления выражения GROUP BY. Если указано выражение GROUP BY, список выборки может содержать статистическую функцию COUNT_BIG() или SUM(). Однако функция SUM() не может быть указана для столбца, допускающего значение NULL. Инструкция не может содержать предложений HAVING, CUBE и ROLLUP.
- Отображаемый столбец в инструкции SELECT, используемый как простое выражение, не должен встречаться в списке более одного раза.
- В инструкцию нельзя включать операторы PIVOT и UNPIVOT.
- В инструкцию нельзя включать операторы UNION, INTERSECT и EXCEPT.
- Инструкция не должна ссылаться на представления.
- Инструкция не должна содержать следующие операторы и предложения: DISTINCT, COMPUTE, COMPUTE BY и INTO.
- Инструкция не должна ссылаться на глобальные серверные переменные (@@имя_переменной).
- Инструкция не должна ссылаться на производные таблицы, временные таблицы и табличные переменные.
- Инструкция не должна ссылаться на таблицы или представления других баз данных или серверов.
- Инструкция не должна содержать подзапросов, внешних соединений и самосоединений.
- Инструкция не должна ссылаться на типы больших объектов: text, ntext и image.
- Инструкция не должна содержать полнотекстовые предикаты CONTAINS и FREETEXT.
- Инструкция не должна вызывать функции наборов строк, в том числе OPENROWSET и OPENQUERY.
- Инструкция не должна вызывать следующие статистические функции: AVG, COUNT(*), MAX, MIN, STDEV, STDEVP, VAR и VARP.
- Инструкция не должна вызывать какие-либо недетерминированные функции, в том числе ранжирующие и аналитические.
- Инструкция не должна вызывать пользовательские статистические выражения.
- Инструкция не должна ссылаться на системные таблицы и представления, включая представления каталогов и динамические административные представления.
- В инструкцию нельзя включать предложение FOR BROWSE.
- Инструкция не должна ссылаться на очередь.
- В инструкции не могут содержаться условные инструкции, которые не изменяются и не возвращают результаты (например, WHERE 1=0).
- Инструкция не может указывать подсказку блокировки READPAST.
- Инструкция не должна ссылаться на какие-либо операторы QUEUE компонента Service Broker.
- Инструкция не должна ссылаться на синонимы.
- В инструкции не должно быть сравнений или выражений на основе типов данных «double/real».
Пакеты и хранимые процедуры
Если запрос на подписку сделан для пакета или хранимой процедуры, для каждой инструкции, выполняемой в пакете или хранимой процедуре, будет сделан отдельный запрос на подписку.
Инструкция EXECUTE не регистрирует уведомление, но направляет требование об уведомлении выполняемой команде. Если это пакет, к выполняемым инструкциям будет применен контекст и правила, описанные выше.
Дублирующиеся подписки
Применение дубликата активной подписки вызовет обновление существующей подписки через указанный интервал времени ожидания. Дубликат подписки должен удовлетворять следующим условиям.
- Запрос должен передаваться пользователем, который создал существующую подписку в контексте той же базы данных.
- Должны использоваться тот же шаблон, значения параметров, идентификатор уведомления и расположение доставки.
Это значит, что, если уведомление затребовано для одинаковых запросов, будет отправлено только одно уведомление. Данные условия применяются к запросам, дублированным в пакетах, или к запросам, которые вызываются несколько раз в хранимой процедуре.
См. также
Основные понятия
Создание индексированных представлений
Другие ресурсы
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
| Версия | Журнал |
|---|---|
14 апреля 2006 г. |
|
Примечание.