SET 陈述(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

Transact-SQL 编程语言提供了若干 SET 语句,用于改变当前会话对特定信息的处理方式。 这些 SET 陈述被归类为下表所示的类别。

关于如何用语 SET 句设置局部变量,请参见 SET @local_variable (Transact-SQL)

类别 语句
日期和时间语句 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
注意:将在 SQL Server 的未来版本中删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

SET NOCOUNT

SET NOEXEC

SET NUMERIC_ROUNDABORT

SET PARSEONLY

SET QUERY_GOVERNOR_COST_LIMIT

SET 结果 SET 追踪 (预览)
注意:此功能仅适用于 Azure Synapse Analytics。

SET ROWCOUNT

SET TEXTSIZE
ISO 设置语句 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 语句均在执行或运行时运行,唯独以下语句在解析时运行:

    • SET FIPS_FLAGGER
    • SET OFFSETS
    • SET PARSEONLY
    • 和 SET QUOTED_IDENTIFIER
  • 如果某个 SET 语句在存储过程或触发器中运行,在存储过程或触发器返回控制权后,该 SET 选项的值会被恢复。 此外,如果你在动态SQL字符串中指定 SET 一个语句,该语句通过 sp_executesql 或EXECUTE运行, SET 选项值会在控件返回你在动态SQL字符串中指定的批处理返回后恢复。

  • 存储过程在执行时按照 SET 指定的设置执行,除了 SETSET ANSI_NULLS 和 SETSET QUOTED_IDENTIFIER。 存储过程指定 SETSET ANSI_NULLS 或 SETSET QUOTED_IDENTIFIER 使用存储过程创建时指定的设置。 如果在存储过程中使用,任何 SET 设置都会被忽略。

  • sp_configure 的 user options 设置允许服务器范围的设置,并可以跨多个数据库运行。 该设置的行为也类似于显式 SET 语句,但发生在登录时。

  • 通过使用 ALTER DATABASE 设置的数据库设置仅在数据库层面有效,且仅在明确设置时生效。 数据库设置优先于使用 sp_configure 设置的实例选项设置

  • 如果语 SET 句使用ON和OFF,你可以为多个 SET 选项指定任意一个。

    注意

    这不适用于统计相关的 SET 选项。

    例如,将SET QUOTED_IDENTIFIER, ANSI_NULLS ON两ANSI_NULLS者QUOTED_IDENTIFIER都设置为 ON。

  • SET 语句设置覆盖了使用 ALTER DATABASE。 例如,语句中 SET ANSI_NULLS 指定的值会覆盖数据库设置ANSI_NULLs。 此外,如果用户在连接到数据库时依据的值是因为先前使用 sp_configure user options 设置而生效的,或者所依据的值适用于所有 ODBC 和 OLE/DB 连接,则一些连接设置将自动设置为 ON

  • ALTER、CREATE和DROP DATABASE语句都不尊重设定。SETSET LOCK_TIMEOUT

  • 当全局语句或快捷方式 SET 语句设置多个设置时,发出快捷指令 SET 语句会重置所有该快捷 SET 指令语句影响的所有选项的先前设置。 如果 SET 某个选项 SET 在快捷指令语句发出后 SET 被设置,则该个别 SET 语句会覆盖可比的快捷方式设置。 一个快捷指令 SET 语句的例子是 SETSET ANSI_DEFAULTS。

  • 使用批处理时,数据库上下文由使用 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选项设置为 ON:ARITHABORT, QUOTED_IDENTIFIERCONCAT_NULL_YIELDS_NULLANSI_NULLSANSI_PADDINGANSI_WARNINGS。 把选项 NUMERIC_ROUNDABORT 设置为关闭。

    如果你没有将这些选项中的任何一个设置为所需的值,INSERT、、UPDATEDELETEDBCC CHECKDB 和 DBCC CHECKTABLE 对索引视图或计算列上有索引的表的操作将失败。 SQL Server 将发出一个错误,并列出所有设置不正确的选项。 同时,SQL Server 将对这些表或索引视图运行 SELECT 语句,就好像计算列或视图中不存在索引。

  • 当 SET RESULT_SET_CACHING开启时,它会启用当前客户端会话的结果缓存功能。 如果已在数据库级别将 Result_set_caching 设置为 OFF,就无法为会话将它设置为 ON。 当RESULT_SET_CACHING关闭时 SET ,当前客户端会话的结果集缓存功能被禁用。 必须有公共角色的成员身份,才能更改此设置。 适用于:Azure Synapse Analytics Gen2