SET ANSI_PADDING (Transact-SQL)

适用于:Microsoft Fabric 的 Microsoft Fabric Warehouse 中的 SQL Server Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析终结点

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

注意

SET ANSI_PADDING OFF已弃用数据库 ANSI_PADDING OFF 选项。 在 SQL Server 2017(14.x)及更高版本中,Azure SQL 数据库和Azure SQL 托管实例ANSI_PADDING始终设置为 ON。 在新的应用程序中不应使用已弃用的功能。 有关详细信息,请参阅 SQL Server 2017 中弃用的数据库引擎功能。

Transact-SQL 语法约定

语法

Azure Synapse Analytics 中的 SQL Server 无服务器 SQL 池的语法,Microsoft Fabric。

SET ANSI_PADDING { ON | OFF }

Azure Synapse Analytics 和分析平台系统的语法(PDW)。

SET ANSI_PADDING ON

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

注解

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

此设置只影响新列的定义。 创建列后, SQL Server 会基于创建列时的设置存储这些值。 对此设置的后续更改不会影响现有列。

注意

ANSI_PADDING 应始终设置为 ON.

下表显示了将值插入到具有 char、varcharbinaryvarbinary 数据类型的列中时设置的效果SET ANSI_PADDING

设置 char(n) NOT NULL 或 binary(n) NOT NULL char(n) NULL 或 binary(n) NULL varchar(n) 或 varbinary(n)
ON 填充原始值(char 列具有尾随空格的值,binary 列具有尾随零的值),以达到列的长度。 遵循与字符(nbinary(nNOT NULL相同的规则(如果SET ANSI_PADDING为 )。ON 不会剪裁插入 varchar 列中的字符值的尾随空白。 不会剪裁插入 varbinary 列中的二进制值的尾随零。 不将值填充到列的长度。
OFF 填充原始值(char 列具有尾随空格的值,binary 列具有尾随零的值),以达到列的长度。 遵循与 varchar 或 varbinarySET ANSI_PADDINGOFF相同的规则 剪裁插入 varchar 列中的字符值的尾随空格。 剪裁插入 varbinary 列中的二进制值的尾随零。

进行填充时,char 列用空格填充,binary 列用零填充。 进行剪裁时,char 列的尾随空格被剪裁,binary 列的尾随零被剪裁。

ANSI_PADDING 必须是 ON 在计算列或索引视图上创建或更改索引时。 有关计算列的索引视图和索引所需的 SET 选项设置的详细信息,请参阅使用 SET 语句时的注意事项

SET ANSI_PADDING 的默认值是 ON。 SQL Server Native Client ODBC 驱动程序和 SQL Server Native Client OLE DB Provider for SQL Server 在连接时会自动设置为ANSI_PADDINGON该提供程序。 在连接之前,您可以在应用程序的 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性集合中配置此设置。 默认用于SET ANSI_PADDINGOFF从 DB-Library 应用程序建立的连接。

此设置SET ANSI_PADDING不会影响 nchar、nvarchar、ntexttextimagevarbinary(max)varchar(max)nvarchar(max) 数据类型。 它们始终显示行为 SET ANSI_PADDING ON 。 这意味着不会剪裁尾随空格和零。

ONANSI_PADDING启用时间ANSI_DEFAULTS

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

要查看此设置的当前设置,请运行以下查询。

DECLARE @ANSI_PADDING VARCHAR(3) = 'OFF';
IF ( (16 & @@OPTIONS) = 16 ) SET @ANSI_PADDING = 'ON';
SELECT @ANSI_PADDING AS ANSI_PADDING;

权限

要求 公共 角色具有成员身份。

示例

下面的示例演示了该设置对上述每个数据类型的影响。

ON设置为ANSI_PADDING并测试。

PRINT 'Testing with ANSI_PADDING ON'
SET 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

现在设置为ANSI_PADDINGOFF并测试。

PRINT 'Testing with ANSI_PADDING OFF';
SET 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;