SET
Transact-SQL 程序设计语言提供了一些 SET 语句,这些语句可以更改特定信息的当前会话处理。
SET 语句可分为以下几类:
分类 |
更改以下各项的当前会话设置 |
日期和时间 |
处理日期和时间数据。 |
锁定 |
处理 Microsoft® SQL Server™ 锁定。 |
杂项 |
SQL Server 的杂项功能。 |
查询执行 |
执行和处理查询。 |
SQL-92 设置 |
使用 SQL-92 默认设置。 |
统计信息 |
显示统计信息。 |
事务 |
处理 SQL Server 事务。 |
日期和时间语句
SET DATEFIRST
SET DATEFORMAT
锁定语句
SET DEADLOCK_PRIORITY
SET LOCK_TIMEOUT
杂项语句
SET CONCAT_NULL_YIELDS_NULL
SET CURSOR_CLOSE_ON_COMMIT
SET DISABLE_DEF_CNST_CHK
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 STATISTICS IO
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 FIPS_FLAGGER、SET OFFSETS、SET PARSEONLY 和 SET QUOTED_IDENTIFIER 语句在分析时设置。
- 如果在存储过程中设置 SET 语句,则从存储过程返回控制后将还原 SET 选项的值。因此,在动态 SQL 中指定的 SET 语句不影响动态 SQL 语句之后的语句。
- 存储过程与在执行时指定的 SET 设置一起执行,但 SET ANSI_NULLS 和 SET QUOTED_IDENTIFIER 除外。指定 SET ANSI_NULLS 或 SET QUOTED_IDENTIFIER 的存储过程使用在存储过程创建时指定的设置。如果在存储过程内使用任何 SET 设置,则都将忽略该设置。
- sp_configure 的 user options 设置允许服务器范围的设置,并可以跨多个数据库运行。该设置的行为还类似于显式 SET 语句,在登录时出现该设置的情况除外。
- 数据库设置(使用 sp_dboption 设置的)仅在数据库级上有效,并且只有在未显式设置的情况下才生效。数据库设置替代服务器选项设置(使用 sp_configure 设置)。
- 对于任何带 ON 和 OFF 设置的 SET 语句,可以为多个 SET 选项指定 ON 或 OFF 设置。例如:
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
将 QUOTED_IDENTIFIER 和 ANSI_NULLS 均设置为 ON。
- SET 语句设置将替代数据库选项设置(使用 sp_dboption 设置的)。另外,如果用户在连接到数据库时所基于的值是由于先前使用 sp_configure user options 设置而生效的,或者所基于的值适用于所有 ODBC 和 OLE/DB 连接,则一些连接设置将自动设置为 ON。
- 当全局或快捷 SET 语句(如 SET ANSI_DEFAULTS)设置多个设置时,发出快捷 SET 语句将为所有受快捷 SET 语句影响的选项重置先前的设置。如果在发出快捷 SET 语句后显式设置受快捷 SET 语句影响的个别 SET 选项,则个别 SET 语句将替代相应的快捷设置。
- 当使用批处理时,数据库上下文由使用 USE 语句建立的批处理决定。在存储过程的外部执行的以及批处理中的特殊查询和所有其它语句,继承使用 USE 语句建立的数据库和连接的选项设置。
- 当从批处理或另一个存储过程执行某个存储过程时,该存储过程将根据所在的数据库中当前设置的选项值执行。例如,当存储过程 db1.dbo.sp1 调用存储过程 db2.dbo.sp2 时,存储过程 sp1 根据数据库 db1 的当前兼容级别设置去执行,存储过程 sp2 根据数据库 db2 的当前兼容级别设置去执行。
- 当 Transact-SQL 语句引用驻留在多个数据库中的对象时,当前数据库上下文和当前连接上下文(如果位于批处理中,则是由 USE 语句定义的数据库;如果位于存储过程中,则是包含该存储过程的数据库)将应用于该语句。
- 当在计算列或索引视图上创建和操作索引时,必须将 SET 选项 ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING 和 ANSI_WARNINGS 设置为 ON。必须将选项 NUMERIC_ROUNDABORT 设置为 OFF。
如果这些选项中的任何一个没有设置为所要求的值,则在索引视图上或在计算列带索引的表上进行的 INSERT、UPDATE 和 DELETE 操作将失败。SQL Server 将发出一个错误,列出所有设置不正确的选项。同时,SQL Server 将在这些表或索引视图上处理 SELECT 语句,仿佛计算列或视图上不存在索引一样。