SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO  
。。 
 GO 
SET QUOTED_IDENTIFIER OFF 
GO 
SET ANSI_NULLS ON 
GO 联机丛书那里怎样都看不明,谢谢.

解决方案 »

  1.   

    SET QUOTED_IDENTIFIER
    使 Microsoft® SQL Server™ 遵从关于引号分隔标识符和文字字符串的 SQL-92 规则。由双引号分隔的标识符可以是 Transact-SQL 保留关键字,或者可以包含 Transact-SQL 标识符语法规则通常不允许的字符。注释
    当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。当 SET QUOTED_IDENTIFIER 为 ON 时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 ('') 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。当 SET QUOTED_IDENTIFIER 为 OFF(默认值)时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。在进行连接时,SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 设置默认为 OFF。当创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,用于该存储过程的后续调用。当在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。当 SET ANSI_DEFAULTS 为 ON时,将启用 SET QUOTED_IDENTIFIER。SET QUOTED_IDENTIFIER 还与 sp_dboption 的 quoted identifier 设置相对应。如果 SET QUOTED_IDENTIFIER 为 OFF,则 SQL Server 使用 sp_dboption 的 quoted identifier 设置。有关数据库设置的更多信息,请参见 sp_dboption 和设置数据库选项。SET QUOTED_IDENTIFIER 是在分析时进行设置的。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并且 SET 语句在任何语句执行之前生效。
      

  2.   

    SET ANSI_NULLS
    指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 SQL-92 遵从行为。语法
    SET ANSI_NULLS {ON | OFF}注释
    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 值和非 NULL的行。说明  Microsoft® SQL Server™ 是将空字符串解释为单个空格还是真正的空字符串,取决于 sp_dbcmptlevel 的兼容级别设置。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel。
    当 SET ANSI_NULLS 为 ON 时,所有对空值的比较均取值为 UNKNOWN。当 SET ANSI_NULLS 为 OFF 时,如果数据值是 NULL,则所有数据对空值的比较将取值为 TRUE。如果未指定,则应用当前数据库的 ANSI nulls 选项的设置。有关 ANSI nulls 数据库选项的更多信息,请参见 sp_dboption 和设置数据库选项。为使脚本按预期运行,不管 ANSI nulls 数据库选项或 SET ANSI_NULLS 的设置是什么,在可能包含空值的比较中使用 IS NULL 和 IS NOT NULL。对于存储过程,SQL Server 使用最初创建存储过程时的 SET ANSI_NULLS 设置值。无论随后何时执行存储过程,SET ANSI_NULLS 的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用 SET ANSI_NULLS 时,其设置不更改。在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误,列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样。说明  ANSI_NULLS 是在处理计算列或索引视图上的索引时必须设置为所需值的七个 SET 选项之一。还必须将选项 ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、QUOTED_IDENTIFIER 和 CONCAT_NULL_YIELDS_NULL 设置为 ON,而必须将 NUMERIC_ROUNDABORT 设置为 OFF。
    SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在连接时自动将 ANSI_NULLS 设置为 ON。该设置可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性(它们在连接到 SQL Server 之前在应用程序中设置)中进行配置。对来自 DB-Library 应用程序的连接,SET ANSI_NULLS 默认为 OFF。当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_NULLS。SET ANSI_NULLS 的设置是在执行或运行时设置,而不是在分析时设置。
      

  3.   

    当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔
      

  4.   

    当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。
      

  5.   

    当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字字符串则必须由单引号分隔,
    此时,字段名可以是关键字.SET QUOTED_IDENTIFIER ON  --此时如果为off,则下面的语法则报错
    create table "select" (f1 int)insert into "select"
    select 10select *
    from "select"
      

  6.   

    SET ANSI_NULLS
    指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符遵从规则.当 SET ANSI_NULLS 为 ON 时,即使 列名 中存在空值,使用 WHERE 列名 = NULL 的 SELECT 语句仍返回零行。
    [code=SQL]
    create table test (f1 int)
    insert into test
    select 1 union all
    select nullSET ANSI_NULLS ON 
    --执行以下语句返回0行.
    select *
    from test 
    where f1=nullSET ANSI_NULLS OFF
    --此时执行以下语句返回1行
    select *
    from test 
    where f1=null/*
    f1          
    ----------- (所影响的行数为 0 行)f1          
    ----------- 
    NULL(所影响的行数为 1 行)
    */
    [code]
      

  7.   

    SET ANSI_NULLS
    指定在对空值使用等于 (=) 和不等于 ( <>) 比较运算符时,这些运算符遵从规则.当 SET ANSI_NULLS 为 ON 时,即使 列名 中存在空值,使用 WHERE 列名 = NULL 的 SELECT 语句仍返回零行。create table test (f1 int)
    insert into test
    select 1 union all
    select nullSET ANSI_NULLS ON 
    --执行以下语句返回0行.
    select *
    from test 
    where f1=nullSET ANSI_NULLS OFF
    --此时执行以下语句返回1行
    select *
    from test 
    where f1=null/*
    f1          
    ----------- (所影响的行数为 0 行)f1          
    ----------- 
    NULL(所影响的行数为 1 行)
    */