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

Индексированные представления и индексы по вычисляемым столбцам хранят результаты в базе данных для дальнейшего обращения к ним. Сохраненные результаты действительны только в случае, если все соединения, ссылающиеся на индексированное представление или индексированный вычисляемый столбец, могут создать тот же самый результирующий набор, что и соединение, создавшее индекс. Чтобы убедиться, что сохраненные результаты могут правильно использоваться и возвращать постоянные результаты, параметрам 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

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

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

  • Компонент 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 см. в предыдущей таблице. Эти настройки обеспечивают соблюдение стандарта ISO и рекомендуются для SQL Server. Дополнительные сведения см. в разделе Конфигурация клиентской сети.

ПримечаниеПримечание

Некоторые из программ 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. Любые функции, чьи результаты будут подвергаться влиянию изменений этих параметров, классифицируются как недетерминированные и не могут использоваться в индексированных представлениях или индексированных вычисляемых столбцах.