当设置为 ON 时,可以用双引号分隔标识符,并且必须用单引号分隔文字。所有用双引号分隔的字符串都被解释为对象标识符。引用的标识符不必遵循用于标识符的 Transact-SQL 规则。它们可以是关键字,而且可以包括 Transact-SQL 标识符中通常不允许的字符。如果单引号 (') 是文字字符串的一部分,则可以用双引号 (") 表示它。
当设置为 OFF(默认)时,标识符不能用引号围住,而且必须遵循所有用于标识符的 Transact-SQL 规则。文字可以由单引号或双引号分隔。
SQL Server 还允许使用方括号 ([ ]) 分隔标识符。无论 QUOTED_IDENTIFIER 的设置如何,都可以始终使用括号标识符。有关更多信息,请参见分隔标识符。
当在计算列或索引视图上创建或 *** 作索引时,SET QUOTED_IDENTIFIER 必须设置为 ON。
连接级设置(使用 SET 语句设置)替代 QUOTED_IDENTIFIER 的默认数据库设置。默认情况下,连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将 QUOTED_IDENTIFIER 设置为 ON。有关更多信息,请参见 SET QUOTED_IDENTIFIER。
此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsQuotedIdentifiersEnabled 属性来确定。
ANSI_NULLS
当设置为 ON 时,所有与空值比较的值都取值为 NULL(未知)。当设置为 OFF 时,如果两个值都为 NULL,则非 Unicode 值与空值比较的值都取值为 TRUE。默认情况下,ANSI_NULLS 数据库选项为 OFF。
连接级设置(使用 SET 语句设置)替代 ANSI_NULLS的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_NULLS 设置为 ON。有关更多信息,请参见 SET ANSI_NULLS。
在计算列或索引视图上创建或 *** 作索引时,SET ANSI_NULLS 也必须为 ON。
此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiNullsEnabled 属性来确定。
Transact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE。通过设置 ANSI_NULLS OFF 可将此选项激活。
当 ANSI_NULLS 为 OFF 时,
如果 ColumnA 包含 Null 值,则 ColumnA = NULL 之类的比较 *** 作会返回 TRUE;
如果 ColumnA 除了包含 NULL 外还包含某些值,则这类比较 *** 作将返回 FALSE。
比较计算结果为 NULL 的两个表达式也会返回 TRUE。
ANSI_NULLS 设置不影响包含 NULL 的联接列。联接列中包含 NULL 的行不是结果集的一部分。
当 ANSI_NULLS 设置为 OFF 时,以下 SELECT 语句返回 Customer 表中 Region 为 Null 值的所有行:
复制代码
SELECT CustomerID, AccountNumber, TerritoryID
FROM AdventureWorks.Sales.Customer
WHERE TerritoryID = NULL
如果 SET ANSI_NULLS ON
那么 SQL 语句中, 判断 非空的写法, 要修改为:
WHERE 字段 IS NULL
因为 SET ANSI_NULLS ON 以后,
NULL = NULL 将 返回 false.
这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则。当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
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 的行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)