T-SQL中常用的set语句
1、SET ANSI_DEFAULTS { ON | OFF }示例:
SET ANSI_DEFAULTS ON;
DBCC USEROPTIONS;
SET ANSI_DEFAULTS OFF;
设置 SET ANSI_DEFAULTS ON 并使用 DBCC USEROPTIONS 语句显示受影响的设置。
2、SET ANSI_NULLS { ON | OFF }
T-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE。
ANSI_NULLS 设置不影响包含 NULL 的联接列。联接列中包含 NULL 的行不是结果集的一部分。
当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。 即使 column_name 中包含非空值,使用 WHERE column_nameNULL 的 SELECT 语句仍会返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 () 比较运算符不遵守 ISO 标准。 使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。 使用 WHERE column_nameNULL 的 SELECT 语句返回列中包含非空值的行。 此外,使用 WHERE column_nameXYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。
也就是说,设置为on是你只能这样写:where xx is null 或者 where xx is not null,而设置为off时可以写成这样:where xx = null 或者 where xxnull
如果 SET ANSI_NULLS ON 那么 SQL 语句中, 判断 非空的写法, 要修改为:WHERE 字段IS NULL。SET ANSI_NULLS ON 以后, NULL = NULL 将 返回 false.
3、SET ANSI_PADDING { ON | OFF }
当设置为ON时,不剪裁字符值中插入到varchar列的尾随空格和二进制值中插入到varbinary列的尾随零。不将值按列的长度进行填充。当设置为OFF时,剪裁varchar列的尾随空格和varbinary列的尾随零。该设置只影响新列的定义。
ANSI_PADDING为ON时,将允许空值的Char(n)和binary(n)列填充到列长;而当ANSI_PADDING为OFF时,将剪裁尾随空格和零,始终将不允许空值的Char(n)和binary(n)列填充到列长。
4、SET ANSI_WARNINGS { ON | OFF }
ANSI_WARNINGS 可以影响下列情况:
设置为 ON 时,如果聚合函数(如 SUM、AVG、MAX、MIN、STDEV、STDEVP、VAR、VARP 或 COUNT)中出现空值,将生成警告消息。 设置为 OFF 时,不发出警告。
设置为 ON 时,被零除错误和算术溢出错误将导致回滚语句,并生成错误消息。 设置为 OFF 时,被零除错误和算术溢出错误将导致返回空值。 如果在 character、Unicode 或 binary 列上尝试执行 INSERT 或 UPDATE 操作,而这些列中的新值长度超出最大列大小,则将出现被零除错误和算术溢出错误导致返回空值的行为。
如果 SET ANSI_WARNINGS 为 ON,则根据 ISO 标准,将取消 INSERT 或 UPDATE 操作。 字符列的尾随空格和二进制列的尾随零都将被忽略。 设置为 OFF 时,数据将剪裁为列的大小,并且语句执行成功。
5、SET ARITHABORT { ON | OFF }
在查询执行过程中发生溢出或被零除错误时终止查询。
如果 SET ARITHABORT 为 ON,则这些错误情况将导致查询或批处理终止。如果在事务内发生错误,则回滚事务。如果 SET ARITHABORT 为 OFF 并且发生了这些错误之一,则显示一条警告消息,并给算术运算的结果赋以空值。
说明如果 SET ARITHABORT 和 SET ARITHIGNORE 都没有设置,则 Microsoft® SQL Server™ 将在执行查询后返回 NULL 和一条警告信息。
如果 SET ARITHABORT 为 OFF 并且在对表达式的求值过程中 INSERT、DELETE 或 UPDATE 语句遇到算术错误(溢出、被零除或域错误),SQL Server 将插入或更新 NULL 值。如果目标列不可为空,则插入或更新操作失败并且用户收到错误信息。
如果 SET ARITHABORT 或 SET ARITHIGNORE 为 OFF,并且 SET ANSI_WARNINGS 为 ON,则当遇到被零除或溢出错误时,SQL Server 仍返回错误信息。
SET ARITHABORT 的设置是在执行或运行时设置,而不是在分析时设置。
在计算列或索引视图上创建或操作索引时,SET ARITHABORT 必须为 ON。如果 SET ARITHABORT 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。
权限:
SET ARITHABORT 权限默认授予所有用户。
6、SET ARITHIGNORE { ON | OFF }
控制在查询执行过程中是否从溢出或被零除错误返回错误信息。
SET ARITHIGNORE 设置仅控制是否返回错误信息。不论该设置是什么,Microsoft® SQL Server™ 都将在包含溢出或被零除错误的计算中返回 NULL。可以使用 SET ARITHABORT 设置确定是否终止查询。该设置不影响在 INSERT、UPDATE 和 DELETE 语句执行过程中发生的错误。
如果 SET ARITHABORT 或 SET ARITHIGNORE 为 OFF,并且 SET ANSI_WARNINGS 为 ON,则当遇到被零除或溢出错误时,SQL Server 仍返回错误信息。
SET ARITHIGNORE 的设置是在执行或运行时设置,而不是在分析时设置。
权限
SET ARITHIGNORE 权限默认授予所有用户。
7、SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
将串联结果视为 Null 还是空字符串值。
當是NULL或空字符串時控制是否連接字符串值。
例如:
将 SET 选项 CONCAT_NULL_YIELDS_NULL 设置为 ON 之后,表达式 'abc' + NULL 返回的值是 NULL。
而将 CONCAT_NULL_YIEDS_NULL 设置为 OFF 之后,该表达式得出的结果却是 'abc'。
8、SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }
表示提交事务时服务器将不会关闭游标。
When SET CURSOR_CLOSE_ON_COMMIT is ON, this setting closes any open cursors on commit or rollback in compliance with ISO.如果 SET CURSOR_CLOSE_ON_COMMIT 为 ON,此设置将遵从 ISO 标准,在提交或回滚时关闭所有打开的游标。 如果 SET CURSOR_CLOSE_ON_COMMIT 为 OFF,则在提交事务时将不关闭游标。
9、SET DATEFIRST { number | @number_var }
number | @number_var 是一个整数,表示一周的第一天,可以是下列值中的一个:
值
一周的第一天是
1
星期一
2
星期二
3
星期三
4
星期四
5
星期五
6
星期六
7(默认值,美国英语)
星期日 注释:
使用 @@DATEFIRST 函数检查 SET DATEFIRST 的当前设置。
SET DATEFIRST 的设置是在执行或运行时设置,而不是在分析时设置。
权限:SET DATEFIRST 权限默认授予所有用户。
10、SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH || @deadlock_var | @deadlock_intvar }
::= { -10 | -9 | -8 | … | 0 | … | 8 | 9 | 10 }
控制在发生死锁情况时会话的反应方式。如果两个进程都锁定数据,并且直到其它进程释放自己的锁时,每个进程才能释放自己的锁,即发生死锁情况。
参数:
LOW
指定当前会话为首选死锁牺牲品。Microsoft® SQL Server™ 自动回滚死锁牺牲品的事务,并给客户端应用程序返回 1205 号死锁错误信息。NORMAL
%E6%8C%87%E5%AE%9A%E4%BC%9A%E8%AF%9D%E8%BF%94%E5%9B%9E%E5%88%B0%E9%BB%98%E8%AE%A4%E7%9A%84%E6%AD%BB%E9%94%81%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95%E3%80%82
@deadlock_var
页:
[1]