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 ON - 在字符串值插入列时保留尾随空白。 这是符合 ANSI 的行为。
  • SET ANSI_PADDING OFF - 在字符串值插入列时,剪裁字符串值的尾随空白。 不建议这样做。

注意

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

注解

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

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

注意

ANSI_PADDING 应始终设置为 ON.

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

设置 char(n) NOT NULL 或 binary(n) NOT NULL char(n) NULL 或 binary(n) NULL varchar(n) 或 varbinary(n)
ON 填充原始值(char 列具有尾随空格的值,binary 列具有尾随零的值),以达到列的长度。 遵循与字符(n(如果为 )。 不会剪裁插入 varchar 列中的字符值的尾随空白。 不会剪裁插入 varbinary 列中的二进制值的尾随零。 不将值填充到列的长度。
OFF 填充原始值(char 列具有尾随空格的值,binary 列具有尾随零的值),以达到列的长度。 遵循与 varchar 剪裁插入 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 。 这意味着不会剪裁尾随空格和零。

ANSI_DEFAULTS ON启用时间ANSI_PADDING

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

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

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

权限

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

示例

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

ANSI_PADDING设置为ON并测试。

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;