SET ANSI_PADDING (Transact-SQL)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de análise do SQL no Microsoft FabricWarehouse no Microsoft Fabric

Controla como a coluna armazena valores menores que o tamanho definido da coluna e valores com espaços em branco à direita em dados do tipo char, varchar, binarye varbinary .

Observação

SET ANSI_PADDING OFF e a opção de banco de dados ANSI_PADDING OFF foram preteridas. A partir do SQL Server 2017 (14.x), ANSI_PADDING é sempre definido como ON. Recursos preteridos não devem ser usados em aplicativos novos. Para obter mais informações, consulte Recursos preteridos do Mecanismo de Banco de Dados no SQL Server 2017.

Convenções de sintaxe de Transact-SQL

Sintaxe

Sintaxe para SQL Server, Pool de SQL sem servidor no Azure Synapse Analytics, Microsoft Fabric

SET ANSI_PADDING { ON | OFF }

Sintaxe para Azure Synapse Analytics e PDW (Analytics Platform System)

SET ANSI_PADDING ON

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Comentários

Colunas definidas com os tipos de dados char, varchar, binary e varbinary têm um tamanho definido.

Essa configuração afeta somente a definição de novas colunas. Depois que a coluna é criada, o SQL Server armazena os valores com base na configuração de quando a coluna foi criada. As colunas existentes não são afetadas por uma alteração posterior a essa configuração.

Observação

ANSI_PADDING sempre deve ser definido como ON.

A tabela a seguir mostra os efeitos da configuração SET ANSI_PADDING quando valores são inseridos em colunas com os tipos de dados char, varchar, binary e varbinary.

Configuração char(n) NOT NULL ou binary(n) NOT NULL char(n) NULL ou binary(n) NULL varchar(n) ou varbinary(n)
ON Valor original de preenchimento (com espaços em branco à direita para colunas char e com zeros à direita para colunas binary) até o comprimento da coluna. Siga as mesmas regras de char(n) ou binary(n) NOT NULL quando SET ANSI_PADDING for ON. Os espaços em branco à direita em valores de caractere inseridos em colunas varchar não são cortados. Os zeros à direita em valores binários inseridos em colunas varbinary não são cortados. Os valores não são preenchidos com o tamanho da coluna.
OFF Valor original de preenchimento (com espaços em branco à direita para colunas char e com zeros à direita para colunas binary) até o comprimento da coluna. Segue as mesmas regras para varchar ou varbinary quando SET ANSI_PADDING está OFF. Os espaços em branco à direita em valores de caractere inseridos em uma coluna varchar são cortados. Os zeros à direita em valores binários inseridos em uma coluna varbinary são cortados.

Observação

Quando preenchidas, as colunas char são preenchidas com espaços em branco e as colunas binary são preenchidas com zeros. Quando cortadas, as colunas char têm os espaços em branco à direita cortados e as colunas binary têm os zeros à direita cortados.

ANSI_PADDING deve ser ON ao criar ou alterar índices em colunas computadas ou exibições indexadas. Para obter mais informações sobre as configurações da opção SET com exibições indexadas e índices em colunas computadas, confira "Considerações sobre o uso das instruções SET" em Instruções SET (Transact-SQL).

O padrão para SET ANSI_PADDING é ON. O driver do SQL Server Native Client ODBC e o Provedor OLE DB do SQL Server Native Client para SQL Server definem automaticamente ANSI_PADDING como ON ao conectar. Isso pode ser configurado nas fontes de dados ODBC, nos atributos de conexão ODBC ou nas propriedades de conexão OLE DB definidos no aplicativo antes de conectar. O padrão para SET ANSI_PADDING é OFF para conexões de aplicativos DB-Library.

A configuração de SET ANSI_PADDING não afeta os tipos de dados nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max) e nvarchar(max). Eles sempre apresentam o comportamento SET ANSI_PADDING ON. Isso significa que os espaços e zeros à direita não são cortados.

Quando ANSI_DEFAULTS é ON, ANSI_PADDING está habilitado.

A configuração de ANSI_PADDING é definida no momento da execução, e não no momento da análise.

Para exibir a configuração atual dessa configuração, execute a consulta a seguir.

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

Permissões

Requer associação à função pública .

Exemplos

O exemplo a seguir mostra como a configuração afeta cada um desses tipos de dados.

Defina ANSI_PADDING como ON e teste.

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  

Agora defina ANSI_PADDING como OFF e teste.

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;