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


SET (Transact-SQL)

Язык Transact-SQL предоставляет несколько инструкций SET, которые изменяют текущий сеанс, управляя специфическими данными. Инструкции SET группируются в категории, показанные в следующей таблице.

Категория Инструкции

Инструкции даты и времени

SET DATEFIRST

SET DATEFORMAT

Инструкции блокировки

SET DEADLOCK_PRIORITY

SET LOCK_TIMEOUT

Прочие инструкции

SET CONCAT_NULL_YIELDS_NULL

SET CURSOR_CLOSE_ON_COMMIT

SET FIPS_FLAGGER

SET IDENTITY_INSERT

SET LANGUAGE

SET OFFSETS

SET QUOTED_IDENTIFIER

Инструкции выполнения запросов

SET ARITHABORT

SET ARITHIGNORE

SET FMTONLY

SET NOCOUNT

SET NOEXEC

SET NUMERIC_ROUNDABORT

SET PARSEONLY

SET QUERY_GOVERNOR_COST_LIMIT

SET ROWCOUNT

SET TEXTSIZE

Инструкции настроек стандарта SQL-92

SET ANSI_DEFAULTS

SET ANSI_NULL_DFLT_OFF

SET ANSI_NULL_DFLT_ON

SET ANSI_NULLS

SET ANSI_PADDING

SET ANSI_WARNINGS

Статистические инструкции

SET FORCEPLAN

SET SHOWPLAN_ALL

SET SHOWPLAN_TEXT

SET SHOWPLAN_XML

SET STATISTICS IO

SET STATISTICS XML

SET STATISTICS PROFILE

SET STATISTICS TIME

Инструкции управления транзакциями

SET IMPLICIT_TRANSACTIONS

SET REMOTE_PROC_TRANSACTIONS

SET TRANSACTION ISOLATION LEVEL

SET XACT_ABORT

Рекомендации по использованию инструкций SET

  • Все инструкции SET выполняются во время запуска или выполнения, за исключением FIPS_FLAGGER, SET OFFSETS, SET PARSEONLY и SET QUOTED_IDENTIFIER. Эти инструкции выполняются во время синтаксического анализа.
  • Если инструкция SET запускается в хранимой процедуре или триггере, значение параметра инструкции SET восстанавливается после того, как управление вернется из хранимой процедуры или триггера. Также если инструкция SET указана в динамической строке SQL, которая выполняется с помощью процедуры sp_executesql или инструкции EXECUTE, значение параметра инструкции SET восстанавливается после того, как управление вернется из пакета, указанного в динамической строке SQL.
  • Хранимые процедуры выполняются с настройками SET, указанными во время выполнения, кроме инструкций SET ANSI_NULLS и SET QUOTED_IDENTIFIER. Хранимые процедуры, использующие инструкцию SET ANSI_NULLS или SET QUOTED_IDENTIFIER, используют настройку, указанную в хранимой процедуре во время создания. При использовании внутри хранимой процедуры любые установки SET игнорируются.
  • Аргумент user options процедуры sp_configure допускает настройку в пределах сервера и работает с множеством баз данных. Эта настройка ведет себя так же, как и явная инструкция SET, за исключением того, что возникает во время входа в систему.
  • Настройки базы данных, устанавливаемые с помощью инструкции ALTER DATABASE, действительны только на уровне базы данных и применяются только при явном задании. Настройки базы данных перекрывают настройки параметров экземпляра, которые устанавливаются с помощью процедуры sp_configure.
  • Для любой из инструкций SET со значениями ON и OFF можно указать значения ON или OFF для множества параметров SET.
    ms190356.note(ru-ru,SQL.90).gifПримечание.
    Это неприменимо к статистическим параметрам SET.
    Например, инструкция `SET QUOTED_IDENTIFIER, ANSI_NULLS ON ` устанавливает параметры QUOTED\_IDENTIFIER и ANSI\_NULLS в значение ON.
  • Настройки инструкции SET перекрывают эквивалентные настройки параметров базы данных, которые были установлены с помощью инструкции ALTER DATABASE. Например, значение, указанное в инструкции SET ANSI_NULLS, перекроет настройку базы данных для параметра ANSI_NULL. Кроме того, некоторые настройки соединений автоматически устанавливаются в значение ON, если пользователь соединяется с базой данных, основываясь на значениях, заданных предыдущим использованием настроек процедуры sp_configure user options, или на значениях, которые применимы ко всем соединениям ODBC и OLE/DB.
  • Настройка SET LOCK_TIMEOUT не влияет на выполнение инструкций ALTER, CREATE и DROP DATABASE.
  • Каждая следующая инструкция SET, такая как SET ANSI_DEFAULTS, отменяет предыдущую настройку. Если индивидуальный параметр инструкции SET, связанной с сочетанием клавиш, явно устанавливается после вызова такого сочетания, то индивидуальная инструкция SET перекрывает подобную настройку.
  • При использовании пакетов контекст базы данных определяется пакетом, установленным с помощью инструкции USE. Нерегламентированные запросы и все другие инструкции, которые выполняются за пределами хранимых процедур и которые содержатся в пакетах, наследуют настройки параметров базы данных и соединения, установленные с помощью инструкции USE.
  • Запросы режима MARS совместно используют глобальное состояние, которое содержит большую часть настроек параметров SET последней сессии. Настройки SET могут измениться при выполнении любого запроса. Значения специфичны для контекста запроса, в котором они устанавливаются, и не влияют на другие параллельные запросы режима MARS. Однако после завершения выполнения запроса новые параметры SET копируются в глобальное состояние сеанса. Новые запросы, которые выполняются в том же самом сеансе, после этого изменения будут использовать новые значения параметров SET.
  • При выполнении хранимой процедуры из пакета либо из другой хранимой процедуры она выполняется под значениями параметров, которые установлены в данный момент в базе данных, содержащей хранимую процедуру. Например, если хранимая процедура db1.dbo.sp1 вызывает хранимую процедуру db2.dbo.sp2, то хранимая процедура sp1 выполняется под текущим значением уровня совместимости базы данных db1, а хранимая процедура sp2 — под текущим значением уровня совместимости базы данных db2.
  • Когда инструкция языка Transact-SQL ссылается на объект, который размещен на многих базах данных, к ней применяется текущий контекст базы данных и текущий контекст соединения. В этом случае, если инструкция языка Transact-SQL находится в пакете, текущим контекстом соединения является база данных, определенная инструкцией USE. Если инструкция языка Transact-SQL находится в хранимой процедуре, то контекстом соединения является база данных, которая содержит хранимую процедуру.
  • При создании индексов на вычисляемых столбцах и индексированных представлениях, а также при управлении ими параметры SET ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING и ANSI_WARNINGS должны иметь значение ON. Параметр NUMERIC_ROUNDABORT должен быть установлен в значение OFF.
    Если любой из этих параметров не установлен в требуемое значение, то выполнение инструкций INSERT, UPDATE, DELETE, DBCC CHECKDB и DBCC CHECKTABLE на индексированных представлениях или таблицах с индексами на основе вычисляемых столбцов будет приводить к ошибкам. SQL Server выведет ошибку с перечислением всех неверно установленных параметров. Также SQL Server будет выполнять инструкции SELECT на этих таблицах или индексных представлениях, как будто индексы на вычисляемых столбцах или на представлениях не существуют.

См. также

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

Использование параметров в СУБД SQL Server

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

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