SET ANSI_PADDING (Transact-SQL)

Область применения:SQL Server Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)SQL AnalyticsEndpoints в хранилище Microsoft Fabricв Microsoft Fabric

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

Примечание.

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

По умолчанию значение параметра 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;