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
Beëindigt een query wanneer er een overflow- of deel-door-nul-fout optreedt tijdens de uitvoering van een query.
Transact-SQL syntaxis-conventies
Syntaxis
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric
SET ARITHABORT { ON | OFF }
Syntax for Azure Synapse Analytics and Analytics Platform System (PDW)
SET ARITHABORT ON
Opmerkingen
Zet ARITHABORT altijd op AAN tijdens je logonsessies. Het instellen van ARITHABORT op UIT kan de queryoptimalisatie negatief beïnvloeden, wat tot prestatieproblemen kan leiden.
Waarschuwing
De standaard ARITHABORT-instelling voor SQL Server Management Studio is AAN. Clientapplicaties die ARITHABORT op UIT zetten, kunnen verschillende queryplannen ontvangen, waardoor het moeilijk wordt om slecht presterende queries te troubleshooten. Dat wil zeggen, dezelfde query kan snel uitvoeren in Management Studio, maar traag in de applicatie. Bij het oplossen van problemen met Management Studio moet je altijd de client ARITHABORT-instelling kiezen.
Wanneer SET ARITHABORT en SET ANSI WARNINGS AAN staan, zorgen deze foutcondities ervoor dat de query eindigt.
Wanneer SET ARITHABORT AAN is en SET ANSI WARNINGS UIT, zorgen deze foutcondities ervoor dat de batch eindigt. Als de fouten optreden in een transactie, wordt de transactie teruggedraaid. Wanneer SET ARITHABORT UIT is en een van deze fouten optreedt, verschijnt er een waarschuwingsbericht en is NULLhet resultaat van de rekenkundige bewerking .
Als SET ARITHABORT en SET ANSI WARNINGS UIT zijn en een van deze fouten optreedt, verschijnt er een waarschuwingsmelding en is NULLhet resultaat van de rekenkundige bewerking .
Opmerking
Als noch SET ARITHABORT noch SET ARITHIGNORE AAN is, keert SQL Server terug NULL en verschijnt er een waarschuwingsbericht nadat de query is uitgevoerd.
Wanneer ANSI_WARNINGS een waarde van ON heeft en het databasecompatibiliteitsniveau is ingesteld op 90 of hoger, dan is ARITHABORT impliciet AAN, ongeacht de waarde-instelling. Als het databasecompatibiliteitsniveau op 80 of hoger is gezet, moet de ARITHABORT-optie expliciet op AAN worden gezet.
Voor expressie-evaluatie, als SET ARITHABORT UIT is en een INSERT-, UPDATE- of DELETE-instructie een rekenkundige, overflow-, deel-door-nul- of domeinfout tegenkomt, voegt of werkt SQL Server een NULL waarde in. Als de doelkolom niet nul is, mislukt de invoeg- of updateactie en ziet de gebruiker een foutmelding.
Wanneer ofwel SET ARITHABORT of SET ARITHIGNORE UIT is en SET ANSI_WARNINGS AAN is, geeft SQL Server nog steeds een foutmelding terug bij deling-door-nul of overflow-fouten.
Wanneer SET ARITHABORT UIT is en er een afbreekfout optreedt tijdens de evaluatie van de Booleaanse voorwaarde van een IF-instructie, wordt de FALSE-tak uitgevoerd.
SET ARITHABORT moet AAN staan wanneer je indexen aanmaakt of verandert op berekende kolommen of geïndexeerde weergaven. Als SET ARITHABORT uit is, falen de CREATE, Update, Insert- en DELETE-instructies op tabellen met indexen op berekende kolommen of geïndexeerde weergaven.
De instelling van SET ARITHABORT gebeurt tijdens execute- of runtime, en niet tijdens parsetijd.
SET ARITHABORT OFF wordt niet ondersteund in Azure Synapse Analytics speciale SQL-pools.
Om de huidige instelling voor SET ARITHABORT te bekijken, voer de volgende query uit:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Permissions
Vereist lidmaatschap van de openbare rol.
Voorbeelden
Het volgende voorbeeld toont de deel-door-nul en overloopfouten die instellingen hebben SET ARITHABORT .
-- 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