SET ANSI_PADDING (Transact-SQL)

S’applique à : point de terminaison d’analytique SQL Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL dans Microsoft Fabric Warehouse 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 OFFet l’option ANSI_PADDING OFF de base de données sont déconseillées. Dans SQL Server 2017 (14.x) et versions ultérieures, et Azure SQL Database et Azure SQL Managed Instance, 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, pool SQL serverless dans Azure Synapse Analytics, Microsoft Fabric.

SET ANSI_PADDING { ON | OFF }

Syntaxe pour Azure Synapse Analytics and Analytics Platform System (PDW).

SET ANSI_PADDING ON

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 une modification ultérieure de ce paramètre.

Remarque

ANSI_PADDING doit toujours être défini sur ON.

Le tableau suivant montre les effets du SET ANSI_PADDING paramètre lorsque les valeurs sont insérées dans des colonnes avec des types de données char, varchar, binaire et varbinary .

Setting 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 quand est .SET ANSI_PADDING ON Les espaces de fin dans les valeurs de caractères insérées dans les colonnes varchar ne sont pas rognés. Les zéros de fin dans les valeurs binaires insérées dans des colonnes varbinary ne sont pas rogné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 est OFFSET ANSI_PADDING . 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.

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 avoir la 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 d’option SET requis dans des vues indexées et des index sur des colonnes calculées, consultez Remarques sur l’utilisation des instructions SET.

La valeur par défaut de SET ANSI_PADDING est de ON. Le pilote ODBC SQL Server Native Client et le fournisseur OLE DB SQL Server Native Client pour SQL Server sont automatiquement définis ANSI_PADDING ON 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. La valeur par défaut SET ANSI_PADDING concerne OFF les connexions à partir d’applications de bibliothèque de bases de données.

Le SET ANSI_PADDING paramètre n’affecte pas les types de données nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max)et nvarchar(max). Ils affichent toujours le SET ANSI_PADDING ON comportement. Cela signifie que les espaces de fin et les zéros ne sont pas coupés.

Quand ANSI_DEFAULTS c’est ONle cas, ANSI_PADDING est activé.

Le paramètre est défini au moment de ANSI_PADDING l’exécution ou de l’exécution et non 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éfini ANSI_PADDING sur ON et 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

À présent, définissez et testez ANSI_PADDING OFF .

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;