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 }
Syntax for Azure Synapse Analytics and Analytics Platform System (PDW)
SET ANSI_WARNINGS ON
Opmerkingen
SET ANSI_WARNINGS beïnvloedt de volgende voorwaarden:
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 rekenende overflowfout nulwaarden veroorzaakt, ontstaat als een INSERT of UPDATE wordt geprobeerd op een teken, Unicode of binaire kolom waarin de lengte van een nieuwe waarde de maximale grootte van de kolom overschrijdt. Als SET ANSI_WARNINGS AAN 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 plaatsvindt bij een conversie van binaire of varbinaire data, 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 char(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 voor 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 bewerkt op berekende kolommen of geïndexeerde weergaven. Als SET ANSI_WARNINGS uitvalt, zullen create, update, insert- en DELETE-instructies op tabellen met indexen op berekende kolommen of geïndexeerde weergaven falen. Voor meer informatie over de vereiste SET-optie-instellingen met geïndexeerde weergaven en indexen op berekende kolommen, zie "Overwegingen wanneer u de SET-instructies gebruikt" in SET-statements (Transact-SQL).
SQL Server bevat de optie voor ANSI_WARNINGS database. Dit is gelijkwaardig aan SET ANSI_WARNINGS. Wanneer SET ANSI_WARNINGS AAN is, worden fouten of waarschuwingen geactiveerd in delen 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 dat niet wordt gespecificeerd, geldt de instelling van ANSI_WARNINGS. Als SET ANSI_WARNINGS UIT is, gebruikt SQL Server de waarde van de kolom is_ansi_warnings_on in de sys.databases-catalogusweergave .
Belangrijk
ANSI_WARNINGS moet op AAN staan voor het uitvoeren van gedistribueerde queries.
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, zetten ANSI_WARNINGS automatisch 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 AAN staat, is ANSI_WARNINGS ingeschakeld.
De instelling van ANSI_WARNINGS wordt gedefinieerd tijdens execute- of runtime en niet tijdens parsetijd. Zoals alle SET-statements beïnvloedt SET ANSI_WARNINGS de huidige sessie.
Als SET ARITHABORT of SET ARITHIGNORE UIT is en SET ANSI_WARNINGS AAN staat, geeft SQL Server nog steeds een foutmelding terug bij deling-door-nul of overflowfouten.
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, waarbij de SET ANSI_WARNINGS op 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;