SET ANSI_PADDING (Transact-SQL)
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, binary et varbinary.
Important
Dans une future version de MicrosoftSQL Server ANSI_PADDING sera toujours ON et toute application qui définira explicitement l'option à OFF produira une erreur. Pour cette raison, évitez de l'utiliser dans les nouveaux travaux de développement et prévoyez de modifier les applications qui l'utilisent actuellement.
Syntaxe
SET ANSI_PADDING { ON | OFF }
Notes
Les colonnes contenant des données de type char, varchar, binary 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.
[!REMARQUE]
Il est recommandé que l'option SET ANSI_PADDING soit toujours activée (ON).
Le tableau suivant montre les effets de l'option SET ANSI_PADDING lorsque des valeurs comportant des données de type char, varchar, binary et varbinary sont insérées dans les colonnes.
Valeur |
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) ou binary(n) NOT NULL lorsque l'option SET ANSI_PADDING est activée (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 lorsque l'option SET ANSI_PADDING est désactivée (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. |
[!REMARQUE]
Lorsque qu'elles sont complétées, les colonnes de type char le sont avec des espaces, et celles de type binary le sont avec des zéros. Lorsque les colonnes sont tronquées, celles de type char perdent les espaces à droite, tandis que celles de type binary perdent les zéros à droite.
SET ANSI_PADDING doit être activée (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 valeurs requises des options SET dans des vues indexées et index de colonnes calculées, consultez « Remarques sur l'utilisation de l'instruction SET » dans la rubrique 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'a aucun impact sur les valeurs de type nchar, nvarchar, ntext, text, image et sur les grandes valeurs. 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.
Lorsque SET ANSI_DEFAULTS est défini sur ON, l'option SET ANSI_PADDING est activée.
La valeur de SET ANSI_PADDING est définie lors de l'exécution, et non durant l'analyse.
Lorsque ANSI_PADDING a pour valeur OFF, les requêtes qui impliquent MIN, MAX ou TOP sur les colonnes de caractères peuvent être plus lentes que dans SQL Server 2000.
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.
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