SET ANSI_PADDING (Transact-SQL)

Se aplica a: punto de conexión de SQL Server Azure SQL Instancia administrada el punto de conexión de SQL Analytics Analytics Platform System (PDW) de SQL Analytics system (PDW) de SQL Server en Microsoft Fabric Warehouse en Microsoft Fabric

Controla el modo en que la columna almacena valores más cortos que el tamaño definido y el modo en que almacena valores con espacios en blanco finales en datos de tipo char, varchar, binaryy varbinary .

Nota:

SET ANSI_PADDING OFFy la ANSI_PADDING OFF opción de base de datos están en desuso. En SQL Server 2017 (14.x) y versiones posteriores, y Azure SQL Database y Azure SQL Instancia administrada, ANSI_PADDING siempre se establece en ON. Las características en desuso no se deben usar en nuevas aplicaciones. Para obtener más información, vea Características de Motor de base de datos en desuso en SQL Server 2017.

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis para SQL Server, grupo de SQL sin servidor en Azure Synapse Analytics, Microsoft Fabric.

SET ANSI_PADDING { ON | OFF }

Sintaxis de Azure Synapse Analytics and Analytics Platform System (PDW).

SET ANSI_PADDING ON

Comentarios

Las columnas definidas con tipos de datos char, varchar, binary y varbinary tienen un tamaño definido.

Esta opción solo afecta a la definición de nuevas columnas. Una vez creada la columna, SQL Server almacena los valores de acuerdo con la opción establecida en el momento de su creación. Las columnas existentes no se ven afectadas por un cambio posterior a esta configuración.

Nota:

ANSI_PADDING siempre debe establecerse ONen .

En la tabla siguiente se muestran los efectos de la SET ANSI_PADDING configuración cuando los valores se insertan en columnas con tipos de datos char, varchar, binary y varbinary .

Configuración char(n) NOT NULL o binary(n) NOT NULL char(n) NULL o binary(n) NULL varchar(n) o varbinary(n)
ON Rellena el valor original (con espacios en blanco finales en las columnas char y con ceros finales en las columnas binary) hasta completar la longitud de la columna. Sigue las mismas reglas que para char(n) o binary(n) NOT NULL cuando SET ANSI_PADDING es .ON Los espacios en blanco finales en valores de caracteres insertados en columnas varchar no se recortan. Los ceros finales de los valores binarios insertados en columnas varbinary no se recortan. Los valores no se rellenan hasta completar la longitud de la columna.
OFF Rellena el valor original (con espacios en blanco finales en las columnas char y con ceros finales en las columnas binary) hasta completar la longitud de la columna. Sigue las mismas reglas que para varchar o varbinary cuando SET ANSI_PADDING es OFF. Los espacios en blanco finales en los valores de carácter insertados en una columna varchar se recortan. Los ceros a la derecha en los valores binarios insertados en una columna varbinary se recortan.

Cuando se rellenan las columnas char, se incluyen espacios en blanco y en las columnas binary se incluyen ceros. Cuando se recortan las columnas char, se recortan los espacios en blanco finales; en las columnas binary se recortan los ceros finales.

ANSI_PADDING debe ser ON al crear o cambiar índices en columnas calculadas o vista indexadas. Para obtener más información sobre las configuraciones de la opción SET requeridas con vistas indexadas e índices en columnas calculadas, consulte Consideraciones al utilizar las instrucciones SET.

El valor predeterminado para SET ANSI_PADDING es ON. El controlador ODBC de SQL Server Native Client y el proveedor OLE DB de SQL Server Native Client para SQL Server se establecen ANSI_PADDING ON automáticamente en al conectarse. Esta opción se puede configurar en los orígenes de datos ODBC, en los atributos de conexión de ODBC o en las propiedades de conexión OLE DB establecidas en la aplicación antes de conectar. El valor predeterminado de SET ANSI_PADDING es OFF para las conexiones de las aplicaciones de la biblioteca de bases de datos.

La SET ANSI_PADDING configuración no afecta a los tipos de datos nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max)y nvarchar(max). Siempre muestran el SET ANSI_PADDING ON comportamiento. Esto significa que los espacios finales y ceros no se recortan.

Cuando ANSI_DEFAULTS es ON, ANSI_PADDING está habilitado.

La configuración de se define en tiempo de ANSI_PADDING ejecución o ejecución y no en tiempo de análisis.

Para ver la configuración actual de este valor, ejecute la consulta siguiente.

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

Permisos

Debe pertenecer al rol public .

Ejemplos

En este ejemplo se muestra cómo afecta esta opción a cada uno de los tipos de datos.

Establézcalo ANSI_PADDING en ON y pruebe.

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

Ahora se establece ANSI_PADDING en OFF y prueba.

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;