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
Avslutar en fråga när ett överflödes- eller dela-med-noll-fel uppstår under frågeexekveringen.
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server, serverlös SQL-pool i Azure Synapse Analytics, Microsoft Fabric
SET ARITHABORT { ON | OFF }
Syntax för Azure Synapse Analytics and Analytics Platform System (PDW)
SET ARITHABORT ON
Anmärkningar
Ställ ARITHABORT alltid in på PÅ i dina inloggningssessioner. Att ställa ARITHABORT in på AV kan påverka frågeoptimeringen negativt och leda till prestandaproblem.
Varning
Standardinställningen ARITHABORT för SQL Server Management Studio är PÅ. Klientapplikationer som ställer ARITHABORT in på AV kan få olika frågeplaner, vilket gör det svårt att felsöka dåligt presterande frågor. Det vill säga, samma fråga kan köras snabbt i Management Studio men långsamt i applikationen. När du felsöker frågor med Management Studio, matcha alltid klientinställningen ARITHABORT .
När SET ARITHABORT och SET ANSI-VARNINGAR är PÅ, gör dessa felvillkor att frågan avslutas.
När SET ARITHABORT är PÅ och SET ANSI VARNINGAR är AV, gör dessa felvillkor att batchen avslutas. Om felen uppstår i en transaktion rullas transaktionen tillbaka. När SETSET ARITHABORT är AV och ett av dessa fel uppstår, visas ett varningsmeddelande och resultatet av den aritmetiska operationen är NULL.
Om SET ARITHABORT och SET ANSI-VARNINGAR är AV och ett av dessa fel uppstår, visas ett varningsmeddelande, och resultatet av den aritmetiska operationen är NULL.
Anmärkning
Om varken SET ARITHABORT eller SETSET ARITHIGNORE är PÅ returnerar NULL SQL Server och ett varningsmeddelande visas efter att frågan körts.
När ANSI_WARNINGS har värdet ON och databasens kompatibilitetsnivå är satt till 90 eller högre, är ARITHABORT implicit ON oavsett dess värdeinställning. Om databaskompatibilitetsnivån är satt till 80 eller tidigare måste ARITHABORT alternativet uttryckligen ställas in på ON.
För uttrycksutvärdering, om SET ARITHABORT är OFF och en INSERT, UPDATE, eller DELETE sats stöter på ett aritmetik-, överflöds-, del-med-noll- eller domänfel, infogar eller uppdaterar SQL Server ett NULL värde. Om målkolumnen inte kan nullas misslyckas insättnings- eller uppdateringsåtgärden och användaren ser ett fel.
När antingen SET ARITHABORT eller SETSET ARITHIGNORE är AV och SETSET ANSI_WARNINGS PÅ, returnerar SQL Server fortfarande ett felmeddelande vid delning med noll eller överflödesfel.
När SETSET ARITHABORT är OFF och ett avbrytfel uppstår under utvärderingen av det booleska villkoret för en IF-sats, utförs FALSE-grenen.
SET SET ARITHABORT måste vara PÅ när du skapar eller ändrar index på beräknade kolumner eller indexerade vyer. Om SET ARITHABORT är OFF misslyckas CREATE, UPDATE, INSERT, och DELETE satser på tabeller med index på beräknade kolumner eller indexerade vyer.
Inställningen av SETSET ARITHABORT sker vid exekverings- eller körtid och inte vid parsetid.
SET SET ARITHABORTOFF stöds inte i dedikerade SQL-pooler i Azure Synapse Analytics.
För att se den aktuella inställningen för SETSET ARITHABORT, kör följande fråga:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Permissions
Kräver medlemskap i offentlig roll.
Examples
Följande exempel visar de delnings- och överflödesfel som har SET ARITHABORT inställningar.
-- SET ARITHABORT
-------------------------------------------------------------------------------
-- Create tables t1 and t2 and insert data values.
CREATE TABLE t1 (
a TINYINT,
b TINYINT
);
CREATE TABLE t2 (
a TINYINT
);
GO
INSERT INTO t1
VALUES (1, 0);
INSERT INTO t1
VALUES (255, 1);
GO
PRINT '*** SET ARITHABORT ON';
GO
-- SET ARITHABORT ON and testing.
SET ARITHABORT ON;
GO
PRINT '*** Testing divide by zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
GO
PRINT '*** Resulting data - should be no data';
GO
SELECT *
FROM t2;
GO
-- Truncate table t2.
TRUNCATE TABLE t2;
GO
-- SET ARITHABORT OFF and testing.
PRINT '*** SET ARITHABORT OFF';
GO
SET ARITHABORT OFF;
GO
-- This works properly.
PRINT '*** Testing divide by zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
GO
-- This works as if SET ARITHABORT was ON.
PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
GO
PRINT '*** Resulting data - should be 0 rows';
GO
SELECT *
FROM t2;
GO
-- Drop tables t1 and t2.
DROP TABLE t1;
DROP TABLE t2;
GO