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.

Observação importanteImportante

Em uma versão futura do Microsoft SQL Server ANSI_PADDING sempre será ON e quaisquer aplicativos que definam explicitamente a opção como OFF produzirão um erro. Evite usar esse recurso em novo trabalho de desenvolvimento e planeje modificar os aplicativos que atualmente o utilizam.

Ícone de vínculo de tópicoConvenções de 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.

ObservaçãoObservação

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 até 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.

ObservaçãoObservaçã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.

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 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.

Quando ANSI_PADDING é definido como OFF, as consultas que envolvem MIN, MAX ou TOP em colunas de caractere podem ser mais lentas do que no SQL Server 2000.

Permissões

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

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