Transact-SQL 参考

SET ANSI_PADDING

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

语法

SET ANSI_PADDING { ON | OFF }

注释

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

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

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

下表显示在将值插入含有 charvarcharbinaryvarbinary 数据类型的列时,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

请参见

CREATE TABLE

INSERT

SET

SET ANSI_DEFAULTS