Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric
Specificeert ISO-standaardgedrag voor verschillende foutcondities.
Transact-SQL syntaxis-conventies
Syntaxis
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric
SET ANSI_WARNINGS { ON | OFF }
Syntaxis voor Azure Synapse Analytics en Analytics Platform System (PDW)
SET ANSI_WARNINGS ON
Opmerkingen
SET ANSI_WARNINGS beïnvloedt de volgende aandoeningen:
Wanneer ingesteld op ON, wordt er een waarschuwingsbericht gegenereerd als nullwaarden verschijnen in aggregate functies zoals SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP of COUNT. Wanneer deze op UIT staat, wordt er geen waarschuwing gegeven.
Wanneer deze op ON staat, zorgen de deel-door-nul en rekenkundige overflowfouten ervoor dat de instructie wordt teruggedraaid en wordt er een foutmelding gegenereerd. Wanneer deze op UIT wordt gezet, zorgen de deel-door-nul en rekenkundige overloopfouten ervoor dat nulwaarden worden teruggegeven. Het gedrag waarbij een deel-door-nul of rekenkundige overloopfout nulwaarden veroorzaakt, ontstaat als een INSERT of UPDATE wordt geprobeerd op een karakter, Unicode of binaire kolom waarin de lengte van een nieuwe waarde de maximale grootte van de kolom overschrijdt. Als SETSET ANSI_WARNINGS ON is, wordt de INSERT of UPDATE geannuleerd zoals gespecificeerd door de ISO-standaard. Achterliggende lege plekken worden genegeerd voor tekenkolommen en achterliggende nullen voor binaire kolommen. Wanneer UIT, wordt de data afgekapt tot de grootte van de kolom en slaagt de instructie.
Opmerking
Wanneer er afkap optreedt bij een conversie van binaire of varbinaire gegevens, wordt er geen waarschuwing of fout gegeven, ongeacht de SET opties.
Opmerking
ANSI_WARNINGS wordt niet gerespecteerd bij het doorgeven van parameters in een opgeslagen procedure, door de gebruiker gedefinieerde functie, of bij het declareren en instellen van variabelen in een batch-instructie. Als een variabele bijvoorbeeld is gedefinieerd als teken(3)en vervolgens is ingesteld op een waarde die groter is dan drie tekens, worden de gegevens afgekapt tot de gedefinieerde grootte en slaagt de instructie INSERT of UPDATE.
Je kunt de gebruikersopties sp_configure gebruiken om de standaardinstelling ANSI_WARNINGS voor alle verbindingen met de server in te stellen. Voor meer informatie, zie sp_configure (Transact-SQL).
ANSI_WARNINGS moet AAN staan wanneer je indexen maakt of manipuleert op berekende kolommen of geïndexeerde weergaven. Als SETSET ANSI_WARNINGS OFF is, CREATE, UPDATE, , INSERTen DELETE statements op tabellen met indexen op berekende kolommen of geïndexeerde weergaven zullen falen. Voor meer informatie over de vereiste SET optie-instellingen met geïndexeerde weergaven en indexen op berekende kolommen, zie "Overwegingen bij het gebruik van de SET Statements" in SET Statements (Transact-SQL).
SQL Server bevat de ANSI_WARNINGS database-optie. Dit komt overeen met SET ANSI_WARNINGS. Wanneer SET ANSI_WARNINGS AAN is, worden fouten of waarschuwingen gedeeld door nul, een string die te groot is voor de databasekolom, en andere soortgelijke fouten. Wanneer SET ANSI_WARNINGS UIT is, worden deze fouten en waarschuwingen niet geactiveerd. De standaardwaarde in de model database voor SET ANSI_WARNINGS is UIT. Als niet gespecificeerd, geldt de instelling van ANSI_WARNINGS wel. Als SET ANSI_WARNINGS UIT is, gebruikt SQL Server de waarde van de kolom is_ansi_warnings_on in het sys.databases-catalogusweergave.
Belangrijk
ANSI_WARNINGS moet worden ingesteld op AAN voor het uitvoeren van gedistribueerde query's.
Clients, zoals de SQL Server Native Client ODBC-driver, de SQL Server Native Client OLE DB Provider voor SQL Server, en de Microsoft JDBC-driver voor SQL Server, worden automatisch ingesteld ANSI_WARNINGS op ON met een verbindingsvlag. Dit kan worden geconfigureerd in ODBC-databronnen, in ODBC-verbindingsattributen, ingesteld in de applicatie voordat er verbinding wordt gemaakt. De standaard voor SET ANSI_WARNINGS is UIT voor verbindingen van DB-Library applicaties. Voor meer informatie, zie LOGIN7 in de Tabular Data Stream (TDS) protocolspecificaties.
Wanneer ANSI_DEFAULTS is INGESCHAKELD, ANSI_WARNINGS is ingeschakeld.
De instelling ANSI_WARNINGS wordt gedefinieerd tijdens het uitvoeren of uitvoeren en niet op parseringstijd. Zoals alle SET verklaringen beïnvloedt dit SET ANSI_WARNINGS de huidige sessie.
Als een van beide SETSET ARITHABORTSET ARITHIGNORE UIT is en SETSET ANSI_WARNINGS AAN, geeft SQL Server nog steeds een foutmelding wanneer deel-door-nul of overflow-fouten optreden.
Om de huidige instelling voor deze instelling te bekijken, voert u de volgende query uit.
DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';
SELECT @ANSI_WARN AS ANSI_WARNINGS;
Permissions
Vereist lidmaatschap van de openbare rol.
Voorbeelden
Het volgende voorbeeld toont de drie eerder genoemde situaties, met de SET ANSI_WARNINGS aan en UIT.
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
Zet ANSI_WARNINGS nu op AAN en test.
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
Zet ANSI_WARNINGS nu op UIT en test.
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;