现在的位置: 首页 > 综合 > 正文

SET ANSI_NULLS ON和SET QUOTED_IDENTIFIER ON,SET ANSI_PADDING

2013年09月13日 ⁄ 综合 ⁄ 共 3032字 ⁄ 字号 评论关闭

SET QUOTED_IDENTIFIER ON
GO
是什么意思?

 

语法
SET QUOTED_IDENTIFIER { ON | OFF }

注释
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SETQUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。

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

当 SET QUOTED_IDENTIFIER 为OFF(默认值)时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。

当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SETQUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET语句时的注意事项"。

 

 

 

SET ANSI_NULLS ON是什么意思?

SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>)比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHEREcolumn_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHEREcolumn_name <> NULL 的 SELECT语句仍会返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于(<>) 比较运算符不遵从 SQL-92 标准。使用 WHEREcolumn_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHEREcolumn_name <> NULL 的 SELECT语句返回列中包含非空值的行。此外,使用 WHERE column_name<> XYZ_value 的 SELECT 语句返回所有不为XYZ_value 也不为 NULL 的行。

SET ANSI_PADDING

控制列对小于定义列大小的值的存储方式,以及列对 charvarcharbinary
varbinary 数据中含有尾随空格的值的存储方式。

语法

SET ANSI_PADDING { ON | OFF }

注释

使用 charvarcharbinary
varbinary
数据类型定义的列具有某一定义的大小。

该设置只影响新列的定义。创建了列后,Microsoft® SQL Server™ 基于创建列时的设置存储值。现有的列不受该设置以后更改的影响。

警告  建议始终将 ANSI_PADDING 设置为 ON。

下表显示在将值插入含有 charvarcharbinary
varbinary 数据类型的列时,SET ANSI_PADDING 设置的效果。

设置 char(n) NOT NULL 或 binary(n) NOT NULL char(n) NULL 或 binary(n) NULL varchar(n) 或 varbinary(n)
ON 将起始值(含有 char 列的尾随空格和 binary 列的尾随零)填充到列的长度。 当 SET ANSI_PADDING 为 ON 时,遵从与 char(n)
binary(n) NOT NULL 相同的规则。
不剪裁插入 varchar 列中的字符值的尾随空格。不剪裁插入 varbinary
列中的二进制值的尾随零。不将值填充到列的长度。
OFF 将起始值(含有 char 列的尾随空格和 binary 列的尾随零)填充到列的长度。 当 SET ANSI_PADDING 为 OFF 时,遵从与 varchar
varbinary
相同的规则。
剪裁插入 varchar 列中的字符值的尾随空格。剪裁插入 varbinary
列中的二进制值的尾随零。

说明  当进行填充时,char 列由空格填充,binary
列由零填充。当进行剪裁时,char 列的尾随空格被剪裁,binary 列的尾随零被剪裁。

在计算列或索引视图上创建或操作索引时,SET ANSI_PADDING 必须为 ON。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见
SET 中的"使用 SET 语句时的注意事项"。

SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在连接时自动将 ANSI_PADDING 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性(它们在连接前在应用程序中设置)中进行配置。对来自 DB-Library 应用程序的连接,ANSI_PADDING 默认为 OFF。

ncharnvarcharntext 列始终显示 SET ANSI_PADDING ON 行为,与 SET ANSI_PADDING 的当前设置无关。

当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_PADDING。

SET ANSI_PADDING 的设置是在执行或运行时设置,而不是在分析时设置。

权限

SET ANSI_PADDING 权限默认授予所有用户。

示例

下例演示该设置如何影响这些数据类型中的每一个。

SET ANSI_PADDING ON
GO
PRINT 'Testing with ANSI_PADDING ON'
GO

CREATE TABLE t1 
(charcol char(16) NULL, 
varcharcol varchar(16) NULL, 
varbinarycol varbinary(8))
GO
INSERT INTO t1 VALUES ('No blanks', 'No blanks', 0x00ee)
INSERT INTO t1 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00)

SELECT 'CHAR'='>' + charcol + '<', 'VARCHAR'='>' + varcharcol + '<',
   varbinarycol
FROM t1
GO

SET ANSI_PADDING OFF
GO
PRINT 'Testing with ANSI_PADDING OFF'
GO

CREATE TABLE t2 
(charcol char(16) NULL, 
varcharcol varchar(16) NULL, 
varbinarycol varbinary(8))
GO
INSERT INTO t2 VALUES ('No blanks', 'No blanks', 0x00ee)
INSERT INTO t2 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00)

SELECT 'CHAR'='>' + charcol + '<', 'VARCHAR'='>' + varcharcol + '<',
   varbinarycol
FROM t2
GO

DROP TABLE t1
DROP TABLE t2
GO

抱歉!评论已关闭.