SET ANSI_PADDING (Transact-SQL)

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

Aplica-se a: SQL Server (do SQL Server 2008 à versão atual).

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

SET ANSI_PADDING { ON | OFF }

Comentários

As colunas definidas com 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.

Dica

Recomenda-se que ANSI_PADDING sempre seja 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 de preenchimento original (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 que para char(n) ou binary(n) NOT NULL quando SET ANSI_PADDING é 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 de preenchimento original (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 que para varchar ou varbinary quando SET ANSI_PADDING é 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.

Dica

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.

SET 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, consulte "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 SQL Server Native Client ODBC e o SQL Server Native Client OLE DB Provider for 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 SET ANSI_PADDING não afeta valores nchar, nvarchar, ntext, text, image e maiores. Eles sempre apresentam o comportamento SET ANSI_PADDING ON. Isso significa que os espaços e zeros à direita não são cortados.

Quando SET ANSI_DEFAULTS é ON, SET ANSI_PADDING está habilitado.

A configuração de SET 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 public.

Exemplos

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

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

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;

Consulte também

Referência

Instruções SET (Transact-SQL)

SESSIONPROPERTY (Transact-SQL)

CREATE TABLE (SQL Server)

INSERT (Transact-SQL)

SET ANSI_DEFAULTS (Transact-SQL)