在学习SQLserver的过程中总会遇到一些陌生的名词,比如这两个:ansi_nulls 和 quoted_identifier
1.ansi_nulls介绍:
注意:SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。
当 SET ANSI_NULLS 为 ON 时:
即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句或 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。
当 SET ANSI_NULLS 为 OFF 时:
等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。
使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中包含非空值的行。
此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。
2.quoted_identifier 介绍:
注意:标示符是SQL中的中括号[]
当SET QUOTED_IDENTIFIER值为ON时:
双引号内的字符被当作是数据库对象。就是说双引号" "和标识符[]效果是一样样的,他们都表示引用的字符是数据库对象。单引号'表示字符串的边界。
当SET QUOTDE_IDENTIFIER OFF时:双引号被解释为字符串的边界,和单引号的作用是类似的。就是说双引号"不能当做标识符使用,但是可以当做字符边界,和单引号'的效果是一样样的。
1 SET QUOTED_IDENTIFIER ON
2 SELECT * FROM "USER" WHERE a='netasp'
4 SET QUOTED_IDENTIFIER ON
5 SELECT * FROM [USER] WHERE a='netasp' 在这里 "user"等同于[user],字符串只能用''引起
7 SET QUOTED_IDENTIFIER OFF
8 SELECT * FROM [USER] WHERE a="netasp"
9
10 SET QUOTED_IDENTIFIER OFF
11 SELECT * FROM [USER] WHERE a= 'netasp' 在这里不能用"user" 当做[user]作为对象,字符串可以用""于''引起