Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
Specificerar ISO-standardbeteende för flera felförhållanden.
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server, serverlös SQL-pool i Azure Synapse Analytics, Microsoft Fabric
SET ANSI_WARNINGS { ON | OFF }
Syntax för Azure Synapse Analytics and Analytics Platform System (PDW)
SET ANSI_WARNINGS ON
Anmärkningar
SET ANSI_WARNINGS påverkar följande tillstånd:
När den sätts till ON, om nullvärden förekommer i aggregerade funktioner, såsom SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP eller COUNT, genereras ett varningsmeddelande. När den är inställd på AV ges ingen varning.
När den sätts till ON orsakar divide-med-noll- och aritmetiska överflödesfel att satsen rullas tillbaka och ett felmeddelande genereras. När den sätts till AV orsakar divide-med-noll- och aritmetiska överflödesfel att nollvärden returneras. Beteendet där ett delnings-med-noll- eller aritmetiskt överflödesfel orsakar att nollvärden returneras uppstår om ett INSERT eller UPDATE prövas på ett tecken, en Unicode- eller binärkolumn där längden på ett nytt värde överstiger kolumnens maximala storlek. Om SETSET ANSI_WARNINGS är ON, avbryts INSERT eller UPDATE enligt ISO-standarden. Efterföljande blanka punkter ignoreras för teckenkolumner och efterföljande nollpunkter ignoreras för binära kolumner. När den är AV avkortas data till kolumnens storlek och satsen lyckas.
Anmärkning
När trunkering sker vid någon konvertering till eller från binär eller varbinär data ges ingen varning eller fel, oavsett alternativ SET .
Anmärkning
ANSI_WARNINGS respekteras inte vid överföring av parametrar i en lagrad procedur, användardefinierad funktion eller vid deklarering och inställning av variabler i en batchsats. Om en variabel definieras som tecken(3)och sedan tilldelas ett värde som är större än tre tecken, förkortas data till den definierade storleken och INSERT- eller UPDATE-instruktionen utförs framgångsrikt.
Du kan använda användaralternativet för sp_configure att ställa in standardinställningen för ANSI_WARNINGS alla anslutningar till servern. För mer information, se sp_configure (Transact-SQL).
ANSI_WARNINGS måste vara PÅ när du skapar eller manipulerar index på beräknade kolumner eller indexerade vyer. Om SETSET ANSI_WARNINGS är AV, CREATE, UPDATE, INSERT, och DELETE satser på tabeller med index på beräknade kolumner eller indexerade vyer kommer att misslyckas. För mer information om nödvändiga SET alternativinställningar med indexerade vyer och index på beräknade kolumner, se "Considerations When You Use the SET Statements" i SET Statements (Transact-SQL).
SQL Server inkluderar ANSI_WARNINGS databasalternativet. Detta motsvarar SET ANSI_WARNINGS. När SET ANSI_WARNINGS är PÅ höjs fel eller varningar i delning med noll, sträng som är för stor för databaskolumnen och andra liknande fel. När SET ANSI_WARNINGS är AV aktiveras inte dessa fel och varningar. Standardvärdet i databasen model för SET ANSI_WARNINGS är AV. Om det inte specificeras, gäller inställningen för ANSI_WARNINGS detta. Om SET ANSI_WARNINGS är OFF använder SQL Server värdet på kolumnen is_ansi_warnings_on i sys.databases-katalogvyn.
Viktigt!
ANSI_WARNINGS ska vara inställt på PÅ för att köra distribuerade frågor.
Klienter, såsom SQL Server Native Client ODBC-drivrutin, SQL Server Native Client OLE DB Provider för SQL Server och Microsoft JDBC-drivrutin för SQL Server ställs ANSI_WARNINGS automatiskt in till ON med en anslutningsflagga. Detta kan konfigureras i ODBC-datakällor, i ODBC-anslutningsattribut, som ställs in i applikationen innan anslutning. Standardinställningen för SET ANSI_WARNINGS är AV för anslutningar från DB-Library applikationer. För ytterligare information, se LOGIN7 i Tabular Data Stream (TDS)-protokollspecifikationerna.
När ANSI_DEFAULTS är PÅ ANSI_WARNINGS är aktiverat.
Inställningen ANSI_WARNINGS för definieras vid körning eller körning och inte vid parsningstid. Som alla SET uttalandenSET ANSI_WARNINGS påverkar det den aktuella sessionen.
Om antingen SET ARITHABORT eller SETSET ARITHIGNORE är AV och SETSET ANSI_WARNINGS PÅ, ger SQL Server ändå ett felmeddelande vid delning med noll eller överflödesfel.
För att se den aktuella inställningen för denna inställning, kör följande fråga.
DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';
SELECT @ANSI_WARN AS ANSI_WARNINGS;
Permissions
Kräver medlemskap i offentlig roll.
Examples
Följande exempel visar de tre situationer som nämnts tidigare, med SET ANSI_WARNINGS till PÅ och AV.
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
Nu ställ in ANSI_WARNINGS på PÅ och testa.
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
Nu ställ in ANSI_WARNINGS på AV och testa.
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;