SET ANSI_PADDING (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento 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 OFF y la opción de base de datos OFF de ANSI_PADDING están en desuso. A partir de SQL Server 2017 (14.x), ANSI_PADDING siempre se establece en ACTIVADO. 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 de SQL Server y un grupo de SQL sin servidor en Azure Synapse Analytics, Microsoft Fabric

SET ANSI_PADDING { ON | OFF }

Sintaxis para Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

SET ANSI_PADDING ON

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

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 los cambios posteriores de esta opción.

Nota

ANSI_PADDING siempre se debe establecer en ON.

En esta tabla se muestran los efectos del parámetro SET ANSI_PADDING cuando se insertan valores en columnas con los 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 los valores de caracteres insertados en las columnas varchar no se recortan. Los ceros a la derecha en los valores binarios insertados en las 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 está en 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.

Nota

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 más información sobre las configuraciones de las opciones SET necesarias con vistas indizadas e índices en columnas calculadas, vea el apartado "Consideraciones al utilizar las instrucciones SET" en Instrucciones SET (Transact-SQL).

El valor predeterminado de 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 establecen automáticamente ANSI_PADDING en ON 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. SET ANSI_PADDING tiene como opción predeterminada OFF en las conexiones desde aplicaciones DB-Library.

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

Cuando ANSI_DEFAULTS es ON, se habilita ANSI_PADDING.

El valor de ANSI_PADDING se define en tiempo de ejecución, 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.

Establezca 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 establezca ANSI_PADDING en OFF y pruebe.

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;