Megosztás a következőn keresztül:


SET ANSI_WARNINGS (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-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 }

Syntax for Azure Synapse Analytics and Analytics Platform System (PDW)

SET ANSI_WARNINGS ON

Megjegyzések

A 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últerhelés nullértékeket eredményez, akkor fordul elő, ha egy INSERT vagy UPDATE tesztelés egy karakteren, Unicode-on vagy bináris oszlopon, ahol egy új érték hossza meghaladja az oszlop maximális méretét. Ha a SET ANSI_WARNINGS BEKAPCSOLVA, a INSERT vagy UPDATE az ISO szabvány előírásai szerint törölhető. 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:

Ha a kivágás bármely bináris vagy varbináris adat átalakítása során történik, nem adnak figyelmeztetést vagy hiba, függetlenül a SET opcióktól.

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ása esetén egy batch utasításban. Ha például egy változó karakter(3) értékként van definiálva, majd három karakternél nagyobb értékre van állítva, az adatok csonkulnak a megadott méretre, és az INSERT vagy AZ UPDATE utasítás sikeres lesz.

A felhasználói beállítások opcióval sp_configure beállíthatod az alapértelmezett beállítást ANSI_WARNINGS minden szerverhez csatlakozó számára. További információért lásd sp_configure (Transact-SQL).

ANSI_WARNINGS be kell kapcsolni, amikor indexeket hozol létre vagy kezelsz számított oszlopokon vagy indexelt nézeteken. Ha a SET ANSI_WARNINGS KIKAPCSOLVA, A CREATE, UPDATE, INSERT és DELETE utasítások táblázatokon találhatók, amelyek indexeket tartalmaznak a számított oszlopokon vagy indexelt nézetekben, meghibásodnak. További információért a szükséges SET opció beállításokról indexelt nézetekkel és számítási oszlopokon található indexekkel a "Megfontolások, amikor használod a SET állításokat" ( Transact-SQL) részben.

Az SQL Server tartalmazza a ANSI_WARNINGS adatbázis opciót. Ez egyenértékű a SET ANSI_WARNINGS-vel. Amikor a SET ANSI_WARNINGS BEKAPCSOL, hibák vagy figyelmeztetések jelennek meg nullával osztásban, túl nagy a láncsorban az adatbázis oszlophoz, és más hasonló hibák. Ha a SET ANSI_WARNINGS KIKAPCSOLVA, ezek a hibák és figyelmeztetések nem jelennek meg. A SET ANSI_WARNINGS adatbázisban az alapértelmezett érték model OFF. Ha nincs megadva, akkor a ANSI_WARNINGS beállítása érvényes. Ha a SET ANSI_WARNINGS KIKAPCSOLVA, az SQL Server a sys.databases katalógusnézetben a is_ansi_warnings_on oszlop értékét használja.

Fontos

ANSI_WARNINGS be kell állítani ON-ra az elosztott lekérdezések végrehajtásához.

Az ügyfelek, mint például az SQL Server Native Client ODBC driver, az SQL Server Native Client OLE DB Provider for SQL Server és a Microsoft JDBC Driver for SQL Server automatikusan beállítják ANSI_WARNINGS ON-ra egy kapcsolati 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. A SET ANSI_WARNINGS alapértelmezett beállítása KIKAPCSOLT DB-Library alkalmazások kapcsolatai esetén. További információért lásd a LOGIN7 a Tabular Data Stream (TDS) protokoll specifikációiban.

Amikor ANSI_DEFAULTS be van kapcsolva, ANSI_WARNINGS be van kapcsolva.

A ANSI_WARNINGS beállítása végrehajtáskor vagy futásidőben van definiálva, nem pedig parze-időben. Mint minden SET állítás, a SET ANSI_WARNINGS is befolyásolja a jelenlegi munkamenetet.

Ha a SET ARITHABORT vagy SET ARITHIGNORE KIKAPCSOLT és a SET 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 ON és OFF állapotra.

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 ON-ra, és tesztelj.

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;