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 }
Syntaxe pro Azure Synapse Analytics a systém analytických platforem (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 pokus INSERTUPDATE nebo na znaku, Unicode nebo binárním sloupci, kde délka nové hodnoty přesahuje maximální velikost sloupce. Pokud SETSET ANSI_WARNINGS je ZAPNUTO, nebo INSERTUPDATE se zruší 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 SET možnosti.
Poznámka:
ANSI_WARNINGS není respektována 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 všechna připojení k serveru. Pro více informací viz sp_configure (Transact-SQL).
ANSI_WARNINGS musí být ZAPNUTO, když vytváříte nebo manipulujete s indexy na vypočtených sloupcích nebo indexovaných pohledech. Pokud SETSET ANSI_WARNINGS je VYPNUTO, CREATE, UPDATE, INSERT, a příkazy DELETE na tabulkách s indexy na vypočítaných sloupcích nebo indexovaných pohledech selžou. Pro více informací o požadovaných SET nastaveních možností s indexovanými zobrazeními a indexy ve vypočítaných sloupcích viz "Úvahy při použití SET příkazů" v sekciSET Příkazy (Transact-SQL).
SQL Server obsahuje možnost databázeANSI_WARNINGS. To odpovídá SET ANSI_WARNINGS. Když SET ANSI_WARNINGS je ON, chyby nebo varování se objevují v režimu dělení nulou, řetězci příliš velkého pro sloupec databáze a podobných chybách. Když SET ANSI_WARNINGS je 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 SET ANSI_WARNINGS je VYPNUTO, SQL Server použije hodnotu sloupce is_ansi_warnings_on v katalogu sys.databases.
Důležité
ANSI_WARNINGS pro spouštění distribuovaných dotazů by měla být nastavená na HODNOTU ON.
Klienti, jako je ovladač ODBC pro nativního klienta SQL Server, poskytovatel OLE DB pro SQL Server Native Client pro SQL Server a Microsoft JDBC Driver pro SQL Server, jsou automaticky nastaveny ANSI_WARNINGS na ON s příznakem 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í SET ANSI_WARNINGS pro je VYPNUTO pro připojení z DB-Library aplikací. Pro další informace viz LOGIN7 ve specifikacích protokolu Tabular Data Stream (TDS).
Je-li ANSI_DEFAULTS zapnuto, ANSI_WARNINGS je povoleno.
Nastavení ANSI_WARNINGS je definováno při spuštění nebo spuštění, a ne v době analýzy. Stejně jako všechna SET prohlášení, ovlivňuje SET ANSI_WARNINGS aktuální sezení.
Pokud je jedno nebo SETSET ARITHABORTSET ARITHIGNORE vypnuto a SETSET ANSI_WARNINGS je zapnuté, SQL Server stále vrací 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, s funkcí SET ANSI_WARNINGS 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ď nastavte ANSI_WARNINGS 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ď nastavte ANSI_WARNINGS 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;