SET ANSI_PADDING (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Contrôle le mode de stockage dans la colonne des valeurs dont la longueur est inférieure à la taille définie pour la colonne et de celles contenant des espaces à droite pour les données de type char, varchar, binaryet varbinary .

Remarque

SET ANSI_PADDING OFF et l’option de base de données OFF ANSI_PADDING sont déconseillées. À compter de SQL Server 2017 (14.x), ANSI_PADDING est toujours défini sur ON. Les fonctionnalités dépréciées ne doivent pas être utilisées dans de nouvelles applications. Pour plus d’informations, consultez Fonctionnalités de Moteur de base de données déconseillées dans SQL Server 2017.

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server et Pool SQL serverless dans Azure Synapse Analytics, Microsoft Fabric

SET ANSI_PADDING { ON | OFF }

Syntaxe pour Azure Synapse Analytics et Analytics Platform System (PDW)

SET ANSI_PADDING ON

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

Notes

Les colonnes définies avec les types de données char, varchar, binaire et varbinary ont une taille définie.

Cette valeur affecte uniquement la définition de nouvelles colonnes. Une fois la colonne créée, SQL Server stocke les valeurs en fonction du paramètre en vigueur lors de la création de la colonne. Les colonnes existantes ne sont pas affectées par toute modification ultérieure du paramètre.

Notes

ANSI_PADDING doit toujours avoir la valeur ON.

Le tableau suivant montre les effets de l’option SET ANSI_PADDING quand des valeurs comportant des types de données char, varchar, binary et varbinary sont insérées dans des colonnes.

Paramètre char(n) NOT NULL ou binary(n) NOT NULL char(n) NULL ou binary(n) NULL varchar(n) ou varbinary(n)
ON Complète la valeur d’origine (avec des espaces à droite pour les colonnes de type char et des zéros à droite pour les colonnes de type binary), à concurrence de la longueur de la colonne. Suit les mêmes règles que pour char(n) or binary(n) NOT NULL quand l’option SET ANSI_PADDING est ON. Les espaces à droite figurant dans les valeurs de type character insérées dans des colonnes varchar ne sont pas tronqués. Les zéros à droite figurant dans les valeurs de type binary insérées dans des colonnes varbinary ne sont pas tronqués. Les valeurs ne sont pas complétées à concurrence de la longueur de la colonne.
OFF Complète la valeur d’origine (avec des espaces à droite pour les colonnes de type char et des zéros à droite pour les colonnes de type binary), à concurrence de la longueur de la colonne. Suit les mêmes règles que pour varchar ou varbinary quand SET ANSI_PADDING est OFF. Les espaces à droite dans les valeurs de type character insérées dans les colonnes varchar sont tronqués. Les zéros à droite dans les valeurs de type binary insérées dans les colonnes varbinary sont tronqués.

Notes

Quand les colonnes sont complétées, celles de type char le sont avec des espaces, et celles de type binary le sont avec des zéros. Quand les colonnes sont tronquées, celles de type char perdent les espaces à droite, tandis que celles de type binary perdent les zéros à droite.

ANSI_PADDING doit être activé (valeur ON) lors de la création ou de la modification d’index dans des colonnes calculées ou des vues indexées. Pour plus d’informations sur les paramètres de l’option SET obligatoire avec les affichages indexés et les index sur des colonnes calculées, consultez « Remarques sur l’utilisation des instructions SET » dans Instructions SET (Transact-SQL).

La valeur par défaut de SET ANSI_PADDING est ON. Le pilote ODBC SQL Server Native Client et le fournisseur OLE DB SQL Server Native Client pour SQL Server affectent automatiquement la valeur ON à ANSI_PADDING lors de la connexion. Cette option peut être configurée dans les sources de données et les attributs de connexion ODBC, ou encore dans les propriétés de connexion OLE DB définies dans l'application avant la connexion. Dans le cas d'applications DB-Library, SET ANSI_PADDING prend par défaut la valeur OFF.

La valeur de SET ANSI_PADDING n’affecte pas les types de données nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max) et nvarchar(max). Le comportement par défaut est toujours celui de l'option SET ANSI_PADDING ON. Les espaces et les zéros à droite ne sont donc pas tronqués.

Quand ANSI_DEFAULTS a la valeur ON, l’option ANSI_PADDING est activée.

La valeur d’ANSI_PADDING est définie au moment de l’exécution, pas au moment de l’analyse.

Pour afficher la valeur actuelle de ce paramètre, exécutez la requête suivante.

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

Autorisations

Nécessite l'appartenance au rôle public .

Exemples

L'exemple suivant présente comment l'option affecte les différents types de données.

Définissez ANSI_PADDING avec la valeur ON et effectuez un 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  

Définissez à présent ANSI_PADDING avec la valeur OFF et effectuez un test.

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;