Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Specifikuje chování podle normy ISO pro několik chybových stavů.
Syntaxe
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric
SET ANSI_WARNINGS { ON | OFF }
Syntax for Azure Synapse Analytics and Analytics Platform System (PDW)
SET ANSI_WARNINGS ON
Poznámky
SET ANSI_WARNINGS ovlivňuje následující podmínky:
Při nastavení na ON, pokud se v agregovaných funkcích, jako SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP nebo COUNT, zobrazí se varovná zpráva. Když je nastavení na VYPNUTO, žádné varování se nezobrazí.
Při nastavení na ON způsobí chyby dělení nulou a aritmetického přetečení příkaz zpět a vygeneruje chybovou zprávu. Při nastavení na OFF způsobují chyby dělení nulou a aritmetického přetečení, že se vrátí nulové hodnoty. Chování, při kterém chyba dělení nulou nebo aritmetickým přetečením způsobí vrácení nulových hodnot, nastává, pokud je na znaku, Unicode nebo binárním sloupci vyzkoušeno INSERT nebo UPDATE, kde délka nové hodnoty přesahuje maximální velikost sloupce. Pokud je SET ANSI_WARNINGS ZAPNUTO, INSERT nebo UPDATE je zrušen podle normy ISO. Slepé prázdné pole se ignorují u sloupců znaků a nulové pro binární sloupce. Když je VYPNUTO, data jsou zkrácena na velikost sloupce a příkaz je úspěšný.
Poznámka:
Když dojde k okrácení při jakémkoli převodu na binární nebo varbinární data, není vydáno žádné varování ani chyba, bez ohledu na možnosti SET.
Poznámka:
ANSI_WARNINGS není respektováno při předávání parametrů v uložené procedurě, uživatelem definované funkci nebo při deklaraci a nastavení proměnných v dávkovém příkazu. Pokud je například proměnná definována jako char(3) a pak je nastavená na hodnotu větší než tři znaky, data se zkrátí na definovanou velikost a příkaz INSERT nebo UPDATE bude úspěšný.
Můžete použít možnost sp_configure uživatelských možností pro nastavení výchozího nastavení pro ANSI_WARNINGS pro všechna připojení k serveru. Pro více informací viz sp_configure (Transact-SQL).
ANSI_WARNINGS musí být ZAPNUTÉ, když vytváříte nebo manipulujete s indexy ve vypočtených sloupcích nebo indexovaných pohledech. Pokud je SET ANSI_WARNINGS vypnutý, příkazy CREATE, UPDATE, INSERT a DELETE u tabulek s indexy na vypočtených sloupcích nebo indexovaných pohledech selžou. Pro více informací o povinných nastaveních voleb SET s indexovanými pohledy a indexy ve vypočtených sloupcích viz "Úvahy při použití SET příkazů" v SET příkazech (Transact-SQL).
SQL Server obsahuje možnost ANSI_WARNINGS databáze. To je ekvivalentní SET ANSI_WARNINGS. Když je SET ANSI_WARNINGS zapnutý, chyby nebo varování se objevují v režimu dělení nulou, řetězci příliš velkého pro sloupec databáze a dalších podobných chybách. Když je NASTAVIT ANSI_WARNINGS vypnuto, tyto chyby a varování se nezobrazují. Výchozí hodnota v databázi model pro SET ANSI_WARNINGS je VYPNUTO. Pokud není specifikováno, platí nastavení ANSI_WARNINGS. Pokud je SET ANSI_WARNINGS VYPNUTO, SQL Server použije hodnotu sloupce is_ansi_warnings_on v katalogu sys.databases .
Důležité
ANSI_WARNINGS by měl být nastaven na ON pro provádění distribuovaných dotazů.
Klienti, jako SQL Server Native Client ODBC ovladač, SQL Server Native Client OLE DB Provider pro SQL Server a Microsoft JDBC Driver pro SQL Server, ANSI_WARNINGS automaticky nastaví na ON pomocí příznaku připojení. To lze nastavit ve zdrojích dat ODBC, v atributech připojení ODBC, nastavit v aplikaci před připojením. Výchozí nastavení pro SET ANSI_WARNINGS je VYPNUTO pro připojení z DB-Library aplikací. Pro další informace viz LOGIN7 ve specifikacích protokolu Tabular Data Stream (TDS).
Když je ANSI_DEFAULTS zapnutý, ANSI_WARNINGS je zapnutý.
Nastavení ANSI_WARNINGS je definováno při spuštění nebo běhu a nikoli při parse. Stejně jako všechny SET příkazy, SET ANSI_WARNINGS ovlivňuje aktuální relaci.
Pokud je SET ARITHABORT nebo SET ARITHIGNORE VYPNUTO a SET ANSI_WARNINGS zapnuto, SQL Server stále zobrazí chybovou zprávu při chybách dělení nulou nebo přetečení.
Pro zobrazení aktuálního nastavení tohoto nastavení spusťte následující dotaz.
DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';
SELECT @ANSI_WARN AS ANSI_WARNINGS;
Povolení
Vyžaduje členství ve veřejné roli .
Examples
Následující příklad ukazuje tři již zmíněné situace, přičemž SET ANSI_WARNINGS na ZAPNUTO a VYPNUTO.
CREATE TABLE T1
(
a int,
b int NULL,
c varchar(20)
);
GO
SET NOCOUNT ON;
INSERT INTO T1
VALUES (1, NULL, '')
,(1, 0, '')
,(2, 1, '')
,(2, 2, '');
SET NOCOUNT OFF;
GO
Teď ANSI_WARNINGS nastavte na ON a testujte.
PRINT '**** Setting ANSI_WARNINGS ON';
GO
SET ANSI_WARNINGS ON;
GO
PRINT 'Testing NULL in aggregate';
GO
SELECT a, SUM(b)
FROM T1
GROUP BY a;
GO
PRINT 'Testing String Overflow in INSERT';
GO
INSERT INTO T1
VALUES (3, 3, 'Text string longer than 20 characters');
GO
PRINT 'Testing Divide by zero';
GO
SELECT a / b AS ab
FROM T1;
GO
Teď ANSI_WARNINGS nastavte na VYPNUTO a otestujte.
PRINT '**** Setting ANSI_WARNINGS OFF';
GO
SET ANSI_WARNINGS OFF;
GO
PRINT 'Testing NULL in aggregate';
GO
SELECT a, SUM(b)
FROM T1
GROUP BY a;
GO
PRINT 'Testing String Overflow in INSERT';
GO
INSERT INTO T1
VALUES (4, 4, 'Text string longer than 20 characters');
GO
SELECT a, b, c
FROM T1
WHERE a = 4;
GO
PRINT 'Testing Divide by zero';
GO
SELECT a / b AS ab
FROM T1;
GO
DROP TABLE T1;