Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Több hibafeltétel esetén megadja az ISO szabványos viselkedését.
Transact-SQL szintaxis konvenciók
Szemantika
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric
SET ANSI_WARNINGS { ON | OFF }
Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa
SET ANSI_WARNINGS ON
Megjegyzések
SET ANSI_WARNINGS A következő állapotokat érinti:
Ha ON-ra állítva nullértékek jelennek meg aggregált függvényekben, például SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP vagy COUNT, figyelmeztető üzenet keletkezik. Ha KIKAPCSOLVA, nem adnak figyelmeztetést.
Ha ON-ra állítva állítják be, a nullával osztó és aritmetikai túlterhelési hibák miatt az utasítás visszahúzódik, és hibaüzenet keletkezik. Ha OFF állapotra állítva, a nullával osztó és az aritmetikai túlfolyó hibák nullértékek visszatérését eredményezik. Az a viselkedés, amikor egy nullával osztó vagy aritmetikai túlfolyó hiba nullértékeket eredményez, akkor fordul elő, ha INSERT egy vagy UPDATE egy karakteren, Unicode-on vagy bináris oszlopon próbálják ki, ahol egy új érték hossza meghaladja az oszlop maximális méretét. Ha SETSET ANSI_WARNINGS ON, akkor az INSERT vagy UPDATE az ISO szabvány előírásai szerint történ. A karakteroszlopok mögött lévő üres pontokat figyelmen kívül hagyják, a bináris oszlopok mögött lévő nullákat pedig figyelmen kívül hagyják. Ha KIKAPCSOL, az adat az oszlop méretére rövidítik, és a mondatot sikeressé teszi.
Megjegyzés:
Amikor a bináris vagy varbináris adatra történő átalakítás során levágás történik, nem adnak ki figyelmeztetés vagy hiba, függetlenül a lehetőségektől SET .
Megjegyzés:
ANSI_WARNINGS nem tisztelve a paraméterek továbbításakor tárolt eljárásban, felhasználó által definiált függvényben, vagy változók deklarálásakor és beállításakor egy batch utasításban. Ha például egy változó karakter(3), majd három karakternél nagyobb értékre van beállítva, az adatok csonkolódnak a meghatározott méretre, és a INSERT vagy UPDATE utasítás sikeres lesz.
A felhasználói beállítások sp_configure opcióval beállíthatod az ANSI_WARNINGS alapértelmezett beállítást minden szerverhez való csatlakozáshoz. További információért lásd sp_configure (Transact-SQL).
ANSI_WARNINGS be kell kapcsolni, amikor indexeket hozol létre vagy manipulálsz számított oszlopokon vagy indexelt nézeteken. Ha SETSET ANSI_WARNINGS OFF, akkor CREATE, UPDATE, INSERT, és DELETE a táblázatokon lévő utasítások indexekkel rendelkező oszlopok vagy indexelt nézetek esetén meghibásodnak. További információért az SET indexelt nézetekhez és a számított oszlopokon lévő indexekhez szükséges opcióbeállításokról a "Szempontok az állítások használatakorSET" részben található "Megfontolások" (Transact-SQL) részbenSET.
Az SQL Server tartalmazza az ANSI_WARNINGS adatbázis opciót. Ez egyenértékű a SET ANSI_WARNINGS. Amikor SET ANSI_WARNINGS BEKAPCSOL, akkor hibák vagy figyelmeztetések jelennek meg nullával osztogatásban, túl nagy a láncsorban az adatbázis oszlophoz, és hasonló hibák. Amikor SET ANSI_WARNINGS KI van kapcsolva, ezek a hibák és figyelmeztetések nem jelennek meg. Az adatbázisban SET ANSI_WARNINGS az alapértelmezett érték model OFF. Ha nincs megadva, akkor a beállítás ANSI_WARNINGS érvényes. Ha SET ANSI_WARNINGS OFF, akkor SQL Server a sys.databases katalógusnézetben a is_ansi_warnings_on oszlop értékét használja.
Fontos
ANSI_WARNINGS az elosztott lekérdezések végrehajtásához on értékre kell állítani.
Az ügyfelek, mint például az SQL Server Native Client ODBC driver, az SQL Server Native Client OLE DB Provider for SQL Server, valamint a Microsoft JDBC Driver for SQL Server, automatikusan ANSI_WARNINGS ON-ra állítva kapcsolódási zászlóval. Ez konfigurálható ODBC adatforrásokban, ODBC kapcsolati attribútumokban, amelyeket az alkalmazásban állítanak be a csatlakozás előtt. Az alapértelmezett a SET ANSI_WARNINGS KIKAPCSOLT DB-Library alkalmazások kapcsolatainál. További információért lásd a LOGIN7 a Tabular Data Stream (TDS) protokoll specifikációiban.
Ha ANSI_DEFAULTS be van kapcsolva, ANSI_WARNINGS engedélyezve van.
A beállítás ANSI_WARNINGS végrehajtáskor vagy futtatáskor van definiálva, és nem elemzési időpontban. Mint minden SET nyilatkozat, SET ANSI_WARNINGS ez is befolyásolja az aktuális ülést.
Ha bármelyik SET ARITHABORT vagy SETSET ARITHIGNORE KI van kapcsolva és SETSET ANSI_WARNINGS BEKAPCSOLVA, az SQL Server továbbra is hibaüzenetet ad vissza, ha nullával oszt vagy túlcsordulás hibákkal találkozik.
A jelenlegi beállítás megtekintéséhez futtasd le a következő lekérdezést.
DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';
SELECT @ANSI_WARN AS ANSI_WARNINGS;
Permissions
A nyilvános szerepkör tagságát igényli.
Példák
Az alábbi példa bemutatja a korábban említett három helyzetet, a SET ANSI_WARNINGS BE és OFF (BE) és KI.
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
Most állítsd ANSI_WARNINGS be ON-ra, és teszteld.
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
Most állítsd ANSI_WARNINGS KIKAPCSOLÁSRA és teszteld.
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;