Sdílet prostřednictvím


NASTAVIT ANSI_PADDING (Transact-SQL)

Platí na:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL analytics endpoint v Microsoft FabricSklad v Microsoft FabricSQL databáze v Microsoft Fabric

Určuje způsob, jakým sloupec ukládá hodnoty kratší než definovaná velikost sloupce, a způsob, jakým sloupec ukládá hodnoty, které obsahují koncové hodnoty v datech typu char, varchar, binary a varbinary .

  • SET ANSI_PADDING ON - zachová koncové prázdné hodnoty v řetězcových hodnotách při jejich vložení do sloupce. Toto chování je kompatibilní se standardem ANSI.
  • SET ANSI_PADDING OFF - oříznou koncové prázdné hodnoty v řetězcových hodnotách při jejich vložení do sloupce. Toto chování se nedoporučuje.

Poznámka:

SET ANSI_PADDING OFFa ANSI_PADDING OFF možnost databáze je zastaralá. V SQL Serveru 2017 (14.x) a novějších verzích je vždy nastavená služba ANSI_PADDINGAzure SQL Database a Azure SQL Managed Instance ON . Zastaralé funkce by se neměly používat v nových aplikacích. Další informace najdete v tématu Zastaralé funkce databázového stroje v SQL Serveru 2017.

Transact-SQL konvence syntaxe

Syntaxe

Syntaxe pro SQL Server, bezserverový fond SQL ve službě Azure Synapse Analytics, Microsoft Fabric.

SET ANSI_PADDING { ON | OFF }

Syntaxe pro Azure Synapse Analytics a Platform Platform System (PDW).

SET ANSI_PADDING ON

Poznámky

Sloupce definované pomocí datových typů char, varchar, binary a varbinary mají definovanou velikost.

Toto nastavení má vliv pouze na definici nových sloupců. Po vytvoření sloupce uloží SQL Server hodnoty na základě nastavení při vytvoření sloupce. Pozdější změna tohoto nastavení neovlivní existující sloupce.

Poznámka:

ANSI_PADDING by měla být vždy nastavena na ONhodnotu .

Následující tabulka ukazuje účinky SET ANSI_PADDING nastavení při vkládání hodnot do sloupců s datovými typy char, varchar, binary a varbinary .

Nastavení char(n) NOT NULL nebo binary(n) NOT NULL char(n) NULL nebo binary(n) NULL varchar(n) nebo varbinary(n)
ON Původní hodnotu (s koncovými mezerami pro znakové sloupce a koncovými nulami pro binární sloupce) na délku sloupce. Dodržuje stejná pravidla jako pro znak(n) nebo binary(n),NOT NULL pokud SET ANSI_PADDING je ON. Koncové prázdné hodnoty v hodnotách znaků vložené do sloupců varchar nejsou oříznuté. Koncové nuly v binárních hodnotách vložených do varbinárních sloupců nejsou oříznuté. Hodnoty nejsou vycpané na délku sloupce.
OFF Původní hodnotu (s koncovými mezerami pro znakové sloupce a koncovými nulami pro binární sloupce) na délku sloupce. Řídí se stejnými pravidly jako pro varchar nebo varbinary , pokud SET ANSI_PADDING je OFF. Koncové prázdné hodnoty v hodnotách znaků vložené do sloupce varchar jsou oříznuté. Koncové nuly v binárních hodnotách vložené do varbinárního sloupce jsou oříznuté.

Při vycpávky jsou znakové sloupce vycpané s prázdnými hodnotami a binární sloupce jsou vycpané nulami. Při oříznutí mají znakové sloupce koncové prázdné hodnoty oříznuté a binární sloupce mají oříznuté koncové nuly.

ANSI_PADDING musí být ON při vytváření nebo změně indexů na vypočítaných sloupcích nebo indexovaných zobrazeních. Další informace o požadovaných nastaveních možností SET s indexovanými zobrazeními a indexy ve vypočítaných sloupcích najdete v tématu Důležité informace o použití příkazů SET.

Výchozí hodnota je SET ANSI_PADDINGON. Ovladač ODBC nativního klienta SQL Serveru a zprostředkovatel OLE DB nativního klienta SQL Serveru pro SQL Server se automaticky nastaví ANSI_PADDINGON při připojování. To lze nakonfigurovat ve zdrojích dat ODBC, v atributech připojení ODBC nebo vlastnosti připojení OLE DB nastavené v aplikaci před připojením. Výchozí hodnota SET ANSI_PADDING je OFF pro připojení z DB-Library aplikací.

Nastavení SET ANSI_PADDING nemá vliv na datové typy nchar, nvarchar, ntext, text, obrázek, varbinary(max), varchar(max)a nvarchar(max). Vždy zobrazují SET ANSI_PADDING ON chování. To znamená, že koncové mezery a nuly nejsou oříznuté.

Pokud ANSI_DEFAULTS je , ONANSI_PADDINGje povolena.

Nastavení ANSI_PADDING je definováno při spuštění nebo spuštění, a ne v době analýzy.

Pokud chcete zobrazit aktuální nastavení tohoto nastavení, spusťte následující dotaz.

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

Povolení

Vyžaduje členství ve veřejné roli .

Příklady

Následující příklad ukazuje, jak nastavení ovlivňuje každý z těchto datových typů.

ANSI_PADDING Nastavte ON a otestujte.

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

Teď nastavte ANSI_PADDINGOFF a otestujte.

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;