Partilhar via


SET ANSI_PADDING (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse 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 OFFe a ANSI_PADDING OFF opção de banco de dados foram preteridos. No SQL Server 2017 (14.x) e versões posteriores, e no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, 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

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 nessa configuração.

Observação

ANSI_PADDING deve sempre ser definido como ON.

A tabela a seguir mostra os efeitos da configuração quando os SET ANSI_PADDING 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. Segue as mesmas regras de 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 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 de 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.

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 precisará 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 necessárias com exibições indexadas e índices em colunas computadas, confira Considerações sobre o uso das instruções SET.

O padrão para SET ANSI_PADDING é ON. O driver ODBC do SQL Server Native Client e o Provedor OLE DB do SQL Server Native Client para SQL Server são definidos ANSI_PADDING automaticamente ao ON se 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 for SET ANSI_PADDING é OFF para conexões de aplicativos de biblioteca de banco de dados.

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

Quando ANSI_DEFAULTS é ON, ANSI_PADDING está habilitado.

A configuração de é definida em tempo de execução ou execução e não em tempo de ANSI_PADDING 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 test.

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 e OFF 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;