Инструкции SET (Transact-SQL)SET Statements (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ:даSQL Server (начиная с 2008)нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseTHIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Язык Transact-SQLTransact-SQL предоставляет несколько инструкций SET, которые изменяют текущий сеанс, управляя специфическими данными.The Transact-SQLTransact-SQL programming language provides several SET statements that change the current session handling of specific information. Инструкции SET группируются в категории, показанные в следующей таблице.The SET statements are grouped into the categories shown in the following table.

Сведения об установке локальных переменных с помощью инструкции SET см. в разделе SET @local_variable (Transact-SQL).For information about setting local variables with the SET statement, see SET @local_variable (Transact-SQL).

КатегорияCategory ИнструкцииStatements
Инструкции даты и времениDate and time statements SET DATEFIRSTSET DATEFIRST

SET DATEFORMATSET DATEFORMAT
Инструкции блокировкиLocking statements SET DEADLOCK_PRIORITYSET DEADLOCK_PRIORITY

SET LOCK_TIMEOUTSET LOCK_TIMEOUT
Прочие инструкцииMiscellaneous statements SET CONCAT_NULL_YIELDS_NULLSET CONCAT_NULL_YIELDS_NULL

SET CURSOR_CLOSE_ON_COMMITSET CURSOR_CLOSE_ON_COMMIT

SET FIPS_FLAGGERSET FIPS_FLAGGER

SET IDENTITY_INSERTSET IDENTITY_INSERT

SET LANGUAGESET LANGUAGE

SET OFFSETSSET OFFSETS

SET QUOTED_IDENTIFIERSET QUOTED_IDENTIFIER
Инструкции выполнения запросовQuery Execution Statements SET ARITHABORTSET ARITHABORT

SET ARITHIGNORESET ARITHIGNORE

SET FMTONLYSET FMTONLY

Примечание. Этот компонент находится в режиме обслуживания и может быть удален в будущей версии Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.Note: Этот компонент находится в режиме обслуживания и может быть удален в будущей версии Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

SET NOCOUNTSET NOCOUNT

SET NOEXECSET NOEXEC

SET NUMERIC_ROUNDABORTSET NUMERIC_ROUNDABORT

SET PARSEONLYSET PARSEONLY

SET QUERY_GOVERNOR_COST_LIMITSET QUERY_GOVERNOR_COST_LIMIT

SET ROWCOUNTSET ROWCOUNT

SET TEXTSIZESET TEXTSIZE
Инструкции настроек ISOISO Settings statements SET ANSI_DEFAULTSSET ANSI_DEFAULTS

SET ANSI_NULL_DFLT_OFFSET ANSI_NULL_DFLT_OFF

SET ANSI_NULL_DFLT_ONSET ANSI_NULL_DFLT_ON

SET ANSI_NULLSSET ANSI_NULLS

SET ANSI_PADDINGSET ANSI_PADDING

SET ANSI_WARNINGSSET ANSI_WARNINGS
Статистические инструкцииStatistics statements SET FORCEPLANSET FORCEPLAN

SET SHOWPLAN_ALLSET SHOWPLAN_ALL

SET SHOWPLAN_TEXTSET SHOWPLAN_TEXT

SET SHOWPLAN_XMLSET SHOWPLAN_XML

SET STATISTICS IOSET STATISTICS IO

SET STATISTICS XMLSET STATISTICS XML

SET STATISTICS PROFILESET STATISTICS PROFILE

SET STATISTICS TIMESET STATISTICS TIME
Инструкции управления транзакциямиTransactions statements SET IMPLICIT_TRANSACTIONSSET IMPLICIT_TRANSACTIONS

SET REMOTE_PROC_TRANSACTIONSSET REMOTE_PROC_TRANSACTIONS

SET TRANSACTION ISOLATION LEVELSET TRANSACTION ISOLATION LEVEL

SET XACT_ABORTSET XACT_ABORT

Рекомендации по использованию инструкций SETConsiderations When You Use the SET Statements

  • Все инструкции SET выполняются во время запуска или выполнения, за исключением FIPS_FLAGGER, SET OFFSETS, SET PARSEONLY и SET QUOTED_IDENTIFIER.All SET statements are implemented at execute or run time, except for SET FIPS_FLAGGER, SET OFFSETS, SET PARSEONLY, and SET QUOTED_IDENTIFIER. Эти инструкции выполняются во время синтаксического анализа.These statements are implemented at parse time.

  • Если инструкция SET запускается в хранимой процедуре или триггере, значение параметра инструкции SET восстанавливается после того, как управление вернется из хранимой процедуры или триггера.If a SET statement is run in a stored procedure or trigger, the value of the SET option is restored after control is returned from the stored procedure or trigger. Также, если инструкция SET указана в динамической строке SQL, которая выполняется с помощью процедуры sp_executesql или инструкции EXECUTE, значение параметра инструкции SET восстанавливается после того, как управление вернется из пакета, указанного в динамической строке SQL.Also, if a SET statement is specified in a dynamic SQL string that is run by using either sp_executesql or EXECUTE, the value of the SET option is restored after control is returned from the batch specified in the dynamic SQL string.

  • Хранимые процедуры выполняются с настройками SET, указанными во время выполнения, кроме инструкций SET ANSI_NULLS и SET QUOTED_IDENTIFIER.Stored procedures execute with the SET settings specified at execute time except for SET ANSI_NULLS and SET QUOTED_IDENTIFIER. Хранимые процедуры, использующие инструкцию SET ANSI_NULLS или SET QUOTED_IDENTIFIER, используют настройку, указанную в хранимой процедуре во время создания.Stored procedures specifying SET ANSI_NULLS or SET QUOTED_IDENTIFIER use the setting specified at stored procedure creation time. При использовании внутри хранимой процедуры любые установки SET игнорируются.If used inside a stored procedure, any SET setting is ignored.

  • Параметр user options процедуры sp_configure допускает настройку в пределах сервера и работает с множеством баз данных.The user options setting of sp_configure allows for server-wide settings and works across multiple databases. Эта настройка ведет себя так же, как и явная инструкция SET, за исключением того, что возникает во время входа в систему.This setting also behaves like an explicit SET statement, except that it occurs at login time.

  • Настройки базы данных, устанавливаемые с помощью инструкции ALTER DATABASE, действительны только на уровне базы данных и применяются только при явном задании.Database settings set by using ALTER DATABASE are valid only at the database level and take effect only if explicitly set. Параметры базы данных переопределяют параметры экземпляра, которые устанавливаются с помощью процедуры sp_configure.Database settings override instance option settings that are set by using sp_configure.

  • Для любой из инструкций SET со значениями ON и OFF можно указать значения ON или OFF для множества параметров SET.For any one of the SET statements with ON and OFF settings, you can specify either an ON or OFF setting for multiple SET options.

    Примечание

    Это неприменимо к статистическим параметрам SET.This does not apply to the statistics related SET options.

    Например, инструкция SET QUOTED_IDENTIFIER, ANSI_NULLS ON устанавливает параметры QUOTED_IDENTIFIER и ANSI_NULLS в значение ON.For example, SET QUOTED_IDENTIFIER, ANSI_NULLS ON sets both QUOTED_IDENTIFIER and ANSI_NULLS to ON.

  • Настройки инструкции SET перекрывают эквивалентные настройки параметров базы данных, которые были установлены с помощью инструкции ALTER DATABASE.SET statement settings override equivalent database option settings that are set by using ALTER DATABASE. Например, значение, указанное в инструкции SET ANSI_NULLS, перекроет настройку базы данных для параметра ANSI_NULL.For example, the value specified in a SET ANSI_NULLS statement will override the database setting for ANSI_NULLs. Кроме того, некоторые настройки соединений автоматически устанавливаются в значение ON, если пользователь соединяется с базой данных, основываясь на значениях, заданных предыдущим использованием настроек процедуры sp_configure user options, или на значениях, которые применимы ко всем соединениям ODBC и OLE/DB.Additionally, some connection settings are automatically set ON when a user connects to a database based on the values put into effect by the previous use of the sp_configure user options setting, or the values that apply to all ODBC and OLE/DB connections.

  • Настройка SET LOCK_TIMEOUT не влияет на выполнение инструкций ALTER, CREATE и DROP DATABASE.ALTER, CREATE and DROP DATABASE statements do not honor the SET LOCK_TIMEOUT setting.

  • Каждая следующая инструкция SET, такая как SET ANSI_DEFAULTS, отменяет предыдущую настройку.When a global or shortcut SET statement, such as SET ANSI_DEFAULTS, sets several settings, issuing the shortcut SET statement resets the previous settings for all those options affected by the shortcut SET statement. Если индивидуальный параметр инструкции SET, связанной с сочетанием клавиш, явно устанавливается после вызова такого сочетания, то индивидуальная инструкция SET перекрывает подобную настройку.If an individual SET option that is affected by a shortcut SET statement is explicitly set after the shortcut SET statement is issued, the individual SET statement overrides the corresponding shortcut settings.

  • При использовании пакетов контекст базы данных определяется пакетом, установленным с помощью инструкции USE.When batches are used, the database context is determined by the batch established by using the USE statement. Нерегламентированные запросы и все другие инструкции, которые выполняются за пределами хранимых процедур и которые содержатся в пакетах, наследуют настройки параметров базы данных и соединения, установленные с помощью инструкции USE.Ad hoc queries and all other statements that are executed outside the stored procedure and that are in batches inherit the option settings of the database and connection established by the USE statement.

  • Запросы режима MARS совместно используют глобальное состояние, которое содержит большую часть настроек параметров SET последней сессии.Multiple Active Result Set (MARS) requests share a global state that contains the most recent session SET option settings. Настройки SET могут измениться при выполнении любого запроса.When each request executes it can modify the SET options. Значения специфичны для контекста запроса, в котором они устанавливаются, и не влияют на другие параллельные запросы режима MARS.The changes are specific to the request context in which they are set, and do not affect other concurrent MARS requests. Однако после завершения выполнения запроса новые параметры SET копируются в глобальное состояние сеанса.However, after the request execution is completed, the new SET options are copied to the global session state. Новые запросы, которые выполняются в том же самом сеансе, после этого изменения будут использовать новые значения параметров SET.New requests that execute under the same session after this change will use these new SET option settings.

  • При выполнении хранимой процедуры из пакета либо из другой хранимой процедуры она выполняется под значениями параметров, которые установлены в данный момент в базе данных, содержащей хранимую процедуру.When a stored procedure is executed, either from a batch or from another stored procedure, it is executed under the option values that are currently set in the database that contains the stored procedure. Например, если хранимая процедура db1.dbo.sp1 вызывает хранимую процедуру db2.dbo.sp2, то хранимая процедура sp1 выполняется под текущим значением уровня совместимости базы данных db1, а хранимая процедура sp2 — под текущим значением уровня совместимости базы данных db2.For example, when stored procedure db1.dbo.sp1 calls stored procedure db2.dbo.sp2, stored procedure sp1 is executed under the current compatibility level setting of database db1, and stored procedure sp2 is executed under the current compatibility level setting of database db2.

  • Когда инструкция языка Transact-SQLTransact-SQL ссылается на объект, который размещен на многих базах данных, к ней применяется текущий контекст базы данных и текущий контекст соединения.When a Transact-SQLTransact-SQL statement refers to objects that reside in multiple databases, the current database context and the current connection context applies to that statement. В этом случае, если инструкция языка Transact-SQLTransact-SQL находится в пакете, текущим контекстом соединения является база данных, определенная инструкцией USE. Если инструкция языка Transact-SQLTransact-SQL находится в хранимой процедуре, то контекстом соединения является база данных, которая содержит хранимую процедуру.In this case, if Transact-SQLTransact-SQL statement is in a batch, the current connection context is the database defined by the USE statement; if the Transact-SQLTransact-SQL statement is in a stored procedure, the connection context is the database that contains the stored procedure.

  • При создании индексов на вычисляемых столбцах и индексированных представлениях, а также при управлении ими параметры SET ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING и ANSI_WARNINGS должны иметь значение ON.When you are creating and manipulating indexes on computed columns or indexed views, the SET options ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING, and ANSI_WARNINGS must be set to ON. Параметр NUMERIC_ROUNDABORT должен быть установлен в значение OFF.The option NUMERIC_ROUNDABORT must be set to OFF.

    Если необходимое значение любого из этих параметров не задано, инструкции INSERT, UPDATE, DELETE, DBCC CHECKDB и DBCC CHECKTABLE для индексированных представлений или таблиц с индексами на основе вычисляемых столбцов не смогут быть выполнены.If any one of these options is not set to the required values, INSERT, UPDATE, DELETE, DBCC CHECKDB and DBCC CHECKTABLE actions on indexed views or tables with indexes on computed columns will fail. SQL ServerSQL Server сформирует ошибку с указанием всех неправильно заданных параметров. will raise an error listing all the options that are incorrectly set. Также SQL ServerSQL Server будет выполнять инструкции SELECT на этих таблицах или индексных представлениях, как будто индексы на вычисляемых столбцах или на представлениях не существуют.Also, SQL ServerSQL Server will process SELECT statements on these tables or indexed views as if the indexes on computed columns or on the views do not exist.