Параметры SET, влияющие на результаты

Изменения: 14 апреля 2006 г.

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

  • Создается индекс по представлению или вычисляемому столбцу.

  • Вычисляемый столбец определен и параметр PERSISTED указан.

  • Операция INSERT, UPDATE или DELETE изменяет значения данных, хранящихся в индексированном представлении или индексированном вычисляемом столбце. Сюда входят такие операции как BCP, DTS, репликация и распределенные запросы.

  • Оптимизатор запросов использует индекс в плане выполнения запроса.

  • Для индексированных представлений параметры ANSI_NULLS и QUOTED_IDENTIFIER должны быть установлены на ON при создании представления, поскольку эти две настройки хранятся в метаданных представления.

    Параметры SET Обязательное значение Значение сервера по умолчанию По умолчанию Значение OLE DB и ODBC По умолчанию Значение DB-Library

    ANSI_NULLS

    ON

    OFF

    ON

    OFF

    ANSI_PADDING

    ON

    ON

    ON

    OFF

    ANSI_WARNINGS*

    ON

    OFF

    ON

    OFF

    ARITHABORT

    ON

    ON

    OFF

    OFF

    CONCAT_NULL_YIELDS_NULL

    ON

    OFF

    ON

    OFF

    NUMERIC_ROUNDABORT

    OFF

    OFF

    OFF

    OFF

    QUOTED_IDENTIFIER

    ON

    OFF

    ON

    OFF

    В SQL Server 2005 установка параметра ANSI_WARNINGS в значение ON неявно устанавливает ARITHABORT в значение ON, если уровень совместимости базы данных установлен в значение 90. Если уровень совместимости базы данных установлен в значение 80 или меньше, то параметр ARITHABORT должен быть явно установлен в значение ON.

Когда параметры SET установлены некорректно, может произойти следующее:

  • SQL Server 2005 Database Engine создаст ошибку и выполнит откат любой инструкции INSERT, UPDATE или DELETE, которая изменила значения данных, хранящихся в индексе.
  • Оптимизатор запроса не учтет индекс в плане выполнения любой инструкции Transact-SQL.
  • Создание индексированного представления или вычисляемого столбца окажется невозможным.

Настройки параметров SET для соединений OLE DB и ODBC

Большинство приложений используют либо поставщик OLE DB для SQL Server, либо драйвер ODBC для SQL Server, чтобы подключиться к экземпляру SQL Server, включая среду SQL Server Management Studio, службы Integration Services, репликацию и операции массового копирования данных. Настройки по умолчанию для OLE DB и ODBC корректны для шести параметров SET, необходимых для индексов по представлениям или вычисляемым столбцам. Значения по умолчанию для OLE DB и ODBC см. в предыдущей таблице. Эти настройки обеспечивают соблюдение правил стандарта SQL-92 и являются рекомендуемыми настройками для SQL Server. Дополнительные сведения см. в разделе Конфигурация клиентской сети.

ms175088.note(ru-ru,SQL.90).gifПримечание.
Некоторые из программ SQL Server устанавливают одну или несколько настроек ANSI на OFF для поддержки совместимости с более ранними версиями программ.

Настройки параметров SET для DB-Library и Embedded SQL для соединений C

DB-Library и Embedded SQL для приложений C по умолчанию не устанавливают значения для каких-либо параметров сеанса. В системах, использующих эти API, следует либо снабдить приложения кодом для выполнения соответствующих инструкций SET, либо присвоить параметрам базы данных или сервера по умолчанию корректные значения.

Приоритет установки параметров

Установки ON или OFF для параметров SET могут быть указаны на нескольких уровнях. Окончательная настройка для каждого параметра сеанса определяется операцией с самым высоким приоритетом, которая устанавливает значение параметра. Ниже приведен список приоритетов операций настройки параметров сеанса, причем элементы с самым высоки приоритетом располагаются сверху:

  • Любое приложение может явно перекрывать любые настройки по умолчанию, выполнив инструкцию SET после установки соединения с сервером. Инструкция SET перекрывает все прежние настройки и может быть использована для включения или отключения параметров динамически в ходе работы приложения. Настройки параметров применимы только к текущему сеансу связи.
  • Приложения OLE DB и ODBC могут указать настройки параметров, действительные в момент установки соединения, посредством указания настроек параметров в строках соединения. Настройки параметров применимы только к текущему сеансу связи.
  • Параметры SET, указанные для источника данных ODBC SQL Server с использованием приложения ODBC на панели управления или функции ODBC SQLConfigDataSource.
  • Настройки по умолчанию для базы данных. Можно указать эти значения, используя ALTER DATABASE или обозреватель объектов в среде SQL Server Management Studio.
  • Настройки по умолчанию для сервера. Можно указать эти значения, используя sp_configure, либо обозреватель объектов в среде SQL Server Management Studio, чтобы установить параметр конфигурации сервера user options.

Например, значением ODBC по умолчанию для ANSI_NULLS является ON; однако можно перекрыть это значение, установив этот параметр на OFF в строке соединения ODBC или используя инструкции SET после подключения к базе данных.

Хранимые процедуры и триггеры

Хранимые процедуры и триггеры должны быть написаны таким образом, чтобы они могли работать с шестью параметрами SET, необходимыми для поддержки индексов по представлениям и вычисляемым столбцам. Оптимизатор запросов не использует индекс по представлению или вычисляемому столбцу в инструкциях SELECT, выполняемых хранимой процедурой или триггером, если параметры SET настроены некорректно. Инструкция INSERT, UPDATE или DELETE в хранимой процедуре или триггере, которая изменяет значения данных, хранящихся в индексированном представлении или вычисляемом столбце, выдает ошибку.

Замечания

Инструкция SET может динамически изменять параметры сеанса; следовательно, инструкции SET в базе данных, содержащей индексы по представлениям и индексированные вычисляемые столбцы, должны использоваться с осторожностью. Например, приложение может установить соединение, в котором настройки по умолчанию допускают ссылки на индексированное представление или индексированный вычисляемый столбец; однако, если соединение вызовет хранимую процедуру или триггер, первой инструкцией которых является SET ANSI_WARNINGS OFF, эта инструкция перекроет прежние значения по умолчанию или настройки ANSI_WARNINGS. В таком случае оптимизатор игнорирует все индексированные представления или индексированные вычисляемые столбцы, когда проводит обработку любой инструкции в хранимой процедуре или триггере.

Три других параметра сеанса потенциально способны повлиять на формат результирующих наборов: DATEFIRST, DATEFORMAT и LANGUAGE. Любые функции, чьи результаты будут подвергаться влиянию изменений этих параметров, классифицируются как недетерминированные и не могут использоваться в индексированных представлениях или индексированных вычисляемых столбцах.

См. также

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

Создание индексов вычисляемых столбцов
Распределенные запросы
Общие рекомендации по проектированию индексов
Основы проектирования индексов
Параметры SET

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

CREATE INDEX (Transact-SQL)

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

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

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Обновленное содержимое:
  • К таблице параметров SET добавлена ссылка о том, как установка ANSI_WARNINGS в значение ON влияет на параметр ARITHABORT.