SET ANSI_PADDING (Transact-SQL)

Область применения:yesSQL Server (все поддерживаемые версии) YesУправляемый экземпляр SQL Azure yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

Topic link iconСинтаксические обозначения в Transact-SQL

Синтаксис

Синтаксис для SQL Server и Бессерверный пул SQL в Azure Synapse Analytics

SET ANSI_PADDING { ON | OFF }

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

SET ANSI_PADDING ON

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Remarks

Столбцы с типом данных 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_PADDING должен иметь значение ON при создании или изменении индексов по вычисляемым столбцам или индексированным представлениям. Дополнительные сведения о настройке параметров SET с индексированными представлениями и индексами на вычисляемых столбцах см. в разделе "Рекомендации по использованию инструкций SET" статьи Инструкции SET (Transact-SQL).

По умолчанию значение параметра SET ANSI_PADDING равно ON. Драйвер ODBC для Native Client SQL Server и поставщик OLE DB для Native Client 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;  

См. также:

Инструкции SET (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)
Инструкция CREATE TABLE (Transact-SQL)
Инструкция INSERT (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)