SET ANSI_PADDING (Transact-SQL)

Gilt für:SQL ServerAzure SQL-Datenbank Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Steuert das Speichern von Werten in der Spalte, wenn die Werte kürzer als die definierte Spaltengröße sind, und das Speichern von Werten mit nachfolgenden Leerzeichen in char-, varchar-, binary- und varbinary -Daten.

Hinweis

SET ANSI_PADDING OFF und die Option ANSI_PADDING OFF-Datenbank ist veraltet. Ab SQL Server 2017 (14.x) ist ANSI_PADDING immer auf EIN festgelegt. Als veraltet markierte Funktionen sollten in neuen Anwendungen nicht verwendet werden. Weitere Informationen finden Sie unter veraltete Datenbank-Engine Features in SQL Server 2017.

Transact-SQL-Syntaxkonventionen

Syntax

Syntax für SQL Server und serverlose SQL-Pools in Azure Synapse Analytics, Microsoft Fabric

SET ANSI_PADDING { ON | OFF }

Syntax für Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

SET ANSI_PADDING ON

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Hinweise

Spalten, die mit den Datentypen char, varchar, binary und varbinary definiert sind, verfügen über eine definierte Größe.

Diese Einstellung betrifft ausschließlich die Definition neuer Spalten. Nachdem die Spalte erstellt wurde, speichert SQL Server die Werte gemäß der Einstellung, die beim Erstellen der Spalte festgelegt war. Bestehende Spalten sind von späteren Änderungen dieser Einstellung nicht betroffen.

Hinweis

ANSI_PADDING sollte immer auf ON festgelegt werden.

Die folgende Tabelle zeigt die Auswirkungen der SET ANSI_PADDING-Einstellung, wenn Werte in Spalten vom Datentyp char, varchar, binary und varbinary eingefügt werden.

Einstellung char(n) NOT NULL oder binary(n) NOT NULL char(n) NULL oder binary(n) NULL varchar(n) oder varbinary(n)
ON Füllt den ursprünglichen Wert (mit nachfolgenden Leerräumen für char-Spalten und nachfolgenden Nullen für binary-Spalten) bis zur Spaltenlänge auf. Folgt den gleichen Regeln wie für char(n) oder binary(n) NOT NULL, wenn SET ANSI_PADDING auf ON festgelegt ist. Nachfolgende Leerräume in Zeichenwerten, die in varchar-Spalten eingefügt werden, werden nicht abgeschnitten. Nachfolgende Nullen in Binärwerten, die in varbinary-Spalten eingefügt werden, werden nicht abgeschnitten. Werte werden nicht bis zur Spaltenlänge aufgefüllt.
OFF Füllt den ursprünglichen Wert (mit nachfolgenden Leerräumen für char-Spalten und nachfolgenden Nullen für binary-Spalten) bis zur Spaltenlänge auf. Folgt den gleichen Regeln wie für varchar oder varbinary, wenn SET ANSI_PADDING auf OFF festgelegt ist. Nachfolgende Leerräume in Zeichenwerten, die in eine varchar-Spalte eingefügt werden, werden abgeschnitten. Nachfolgende Nullen in Binärwerten, die in eine varbinary-Spalte eingefügt werden, werden abgeschnitten.

Hinweis

Beim Auffüllen werden char-Spalten mit Leerräumen und binary-Spalten mit Nullen aufgefüllt. Wenn ein Abschneiden stattfindet, werden bei char-Spalten die abschließenden Leerräume abgeschnitten und bei binary-Spalten die abschließenden Nullen.

Für ANSI_PADDING muss beim Erstellen oder Ändern von Indizes für berechnete Spalten oder indizierte Sichten die Einstellung ON festgelegt werden. Weitere Informationen zu den erforderlichen Einstellungen der SET-Option mit indizierten Sichten und Indizes für berechnete Spalten finden Sie in den Überlegungen zum Verwenden der SET-Anweisungen unter SET-Anweisungen (Transact-SQL).

Die Standardeinstellung für SET ANSI_PADDING ist ON. Der ODBC-Treiber von SQL Server Native Client und der OLE DB-Anbieter von SQL Server Native Client für SQL Server legen für ANSI_PADDING beim Herstellen einer Verbindung automatisch ON fest. Diese Einstellung kann in ODBC-Datenquellen, in ODBC-Verbindungsattributen oder in OLE DB-Verbindungseigenschaften konfiguriert werden, die in der Anwendung festgelegt werden, bevor die Verbindung hergestellt wird. Die Standardeinstellung für SET ANSI_PADDING für Verbindungen von DB-Library-Anwendungen ist OFF.

Die Einstellung SET ANSI_PADDING hat keine Auswirkungen auf die Datentypen nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max) und nvarchar(max). Diese zeigen immer das Verhalten von SET ANSI_PADDING ON. Das heißt, dass nachfolgende Leerzeichen und Nullen nicht abgeschnitten werden.

Ist ANSI_DEFAULTS auf ON festgelegt, so ist ANSI_PADDING aktiviert.

Die Einstellung von ANSI_PADDING wird zur Ausführungszeit und nicht zur Analysezeit definiert.

Um die aktuelle Einstellung anzuzeigen, führen Sie die folgende Abfrage aus.

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

Berechtigungen

Erfordert die Mitgliedschaft in der public -Rolle.

Beispiele

Das folgende Beispiel zeigt, wie sich die Einstellung auf die einzelnen Datentypen auswirkt.

Legen Sie ANSI_PADDING auf ON fest, und führen Sie einen Test durch.

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  

Legen Sie nun ANSI_PADDING auf OFF fest, und führen Sie noch einmal einen Test durch.

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;