Поделиться через


SET ANSI_PADDING (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure конечную точку аналитики платформы Аналитики Azure Synapse Analytics (PDW) в хранилище Microsoft Fabric в Microsoft Fabric

Управляет тем, как столбец хранит значения короче, чем определенный размер столбца, и тем, как столбец хранит значения с завершающими пробелами в данных типов char, varchar, binaryи varbinary .

Примечание.

SET ANSI_PADDING OFFANSI_PADDING OFF и параметр базы данных не рекомендуется. В SQL Server 2017 (14.x) и более поздних версиях, а База данных SQL Azure и Управляемый экземпляр SQL Azure ANSI_PADDING всегда задано ONзначение . Не следует использовать нерекомендуемые возможности в новых приложениях. Дополнительные сведения см. в статье об устаревших функциях ядро СУБД в SQL Server 2017.

Соглашения о синтаксисе Transact-SQL

Синтаксис

Синтаксис для SQL Server, бессерверный пул SQL в Azure Synapse Analytics, Microsoft Fabric.

SET ANSI_PADDING { ON | OFF }

Синтаксис для Системы платформы Azure Synapse Analytics и Analytics (PDW).

SET ANSI_PADDING ON

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Замечания

Столбцы с типом данных char, varchar, binary и varbinary имеют определенный размер.

Этот параметр влияет только на определение новых столбцов. После создания столбца SQL Server сохраняет значения на основе параметра при создании столбца. Существующие столбцы не затрагиваются последующим изменением этого параметра.

Примечание.

ANSI_PADDING всегда должно быть задано значение ON.

В следующей SET ANSI_PADDING таблице показаны эффекты параметра при вставке значений в столбцы с типами данных char, varchar, binary и varbinary .

Параметр char(n) NOT NULL или binary(n) NOT NULL char(n) NULL или binary(n) NULL varchar(n) или varbinary(n)
ON Заполнение исходного значения (с замыкающими пробелами для столбцов char и с замыкающими нулями для столбцов binary) до длины столбца. Выполняет те же правила, что и для char(n) или binary(n), NOT NULL когда SET ANSI_PADDING есть.ON Конечные пробелы в значениях символов, вставленных в столбцы varchar , не обрезаются. Конечные нули в двоичных значениях, вставленных в столбцы varbinary , не обрезаются. Значения не подгоняются под длину столбца.
OFF Заполнение исходного значения (с замыкающими пробелами для столбцов char и с замыкающими нулями для столбцов binary) до длины столбца. Выполняет те же правила, что и для varchar или varbinary, когда SET ANSI_PADDING естьOFF. Замыкающие пробелы в символьных значениях, вставляемых в столбец varchar, усекаются. Замыкающие нули в двоичных значениях, вставляемых в столбец varbinary, усекаются.

При заполнении столбцы char заполняются пробелами, а столбцы binary заполняются нулями. При усечении в столбцах char усекаются замыкающие пробелы, а в столбцах binary усекаются замыкающие нули.

ANSI_PADDINGON при создании или изменении индексов в вычисляемых столбцах или индексированных представлениях. Дополнительные сведения о настройке параметров SET с индексированными представлениями и индексами в вычисляемых столбцах см. в разделе Анализ использования инструкций SET.

Значение SET ANSI_PADDING по умолчанию — ON. Драйвер ODBC собственного клиента SQL Server и поставщик OLE DB собственного клиента SQL Server для SQL Server автоматически устанавливаются ANSI_PADDING ON при подключении. Это может быть настроено в источниках данных ODBC, в атрибутах соединения ODBC или свойствах соединения OLE DB, определенных в приложении перед установкой соединения. Значение по умолчанию SET ANSI_PADDING предназначено OFF для подключений из приложений DB-Library.

Параметр SET ANSI_PADDING не влияет на типы данных nchar, nvarchar, ntext, text, image, varbinary(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;

Разрешения

Необходимо быть членом роли public.

Примеры

В следующем примере показано, как значение этого параметра влияет на каждый из типов данных.

Установите 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_PADDING и OFF проверьте.

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;