QUOTED_IDENTIFIER 、ANSI_NULLS

0、QUOTED_IDENTIFIER  

   当SET QUOTED_IDENTIFIER值为ON(默认值)时,双引号内的字符被当作是数据库对象。就是说双引号" "和标识符[]效果是一样,都表示引用的字符是数据库对象。单引号'表示字符串  的边界。标识符可以由双引号分隔,而文字必须由单引号分隔。

  双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必符合 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 (") 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。

  当在计算列或索引视图上创建或更改索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。

   当SET QUOTDE_IDENTIFIER OFF时,双引号被解释为字符串的边界,和单引号的作用是类似的。就是说双引号"不能当做标识符使用,但是可以当做字符边界,和单引号'的效果是一样。标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。 

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   的行。

posted @ 2011-11-19 16:30  @#¥%……  阅读(217)  评论(0编辑  收藏  举报