Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Ukončí dotaz, když během provádění dotazu dojde k přetečení nebo chybě dělení nulou.
Syntaxe
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric
SET ARITHABORT { ON | OFF }
Syntaxe pro Azure Synapse Analytics a systém analytických platforem (PDW)
SET ARITHABORT ON
Poznámky
Vždy nastavte ARITHABORT ZAPNUTO při přihlašovacích sezeních. Nastavení ARITHABORT na VYPNUTO může negativně ovlivnit optimalizaci dotazů a vést k problémům s výkonem.
Výstraha
Výchozí ARITHABORT nastavení SQL Server Management Studio je ZAPNUTO. Klientské aplikace nastavené ARITHABORT na VYPNUTO mohou dostávat různé plány dotazů, což ztěžuje řešení špatně fungujících dotazů. To znamená, že stejný dotaz může být v Management Studiu rychlý, ale v aplikaci pomalý. Při řešení dotazů ve Management Studiu vždy odpovídej nastavení klienta ARITHABORT .
Když SET ARITHABORT jsou A ANSI VAROVÁNÍ ZAPNUTÁ SET , tyto chybové podmínky způsobí ukončení dotazu.
Když SET ARITHABORT je ZAPNUTO a SET ANSI WARNINGS je VYPNUTO, tyto chybové podmínky způsobí ukončení dávkování. Pokud se chyby vyskytnou v transakci, transakce je vrácena zpět. Když SETSET ARITHABORT je VYPNUTO a jedna z těchto chyb nastane, objeví se varovná zpráva a výsledek aritmetické operace je NULL.
Pokud SET ARITHABORT a SET ANSI VAROVÁNÍ jsou VYPNUTA a jedna z těchto chyb nastane, objeví se varovná zpráva a výsledek aritmetické operace je NULL.
Poznámka:
Pokud ani ani SET ARITHABORT není SETSET ARITHIGNORE zapnuto, SQL Server vrátí a NULL po spuštění dotazu se objeví varovná zpráva.
Když ANSI_WARNINGS má hodnotu ON a úroveň kompatibility databáze je nastavena na 90 nebo více, pak ARITHABORT je implicitně ON bez ohledu na nastavení hodnoty. Pokud je úroveň kompatibility databáze nastavena na 80 nebo dříve, musí být volba ARITHABORT explicitně nastavena na ON.
Pro vyhodnocení výrazu, pokud SET ARITHABORT je VYPNUTO a INSERT, UPDATE, nebo DELETE příkaz narazí na aritmetickou, přetečení, dělení nulou nebo chybu domény, SQL Server vloží nebo aktualizuje hodnotuNULL. Pokud cílový sloupec není nulovatelný, akce vložení nebo aktualizace selže a uživatel vidí chybu.
Když je nebo SET ARITHABORTSETSET ARITHIGNORE VYPNUTO a SETSET ANSI_WARNINGS je ZAPNUTO, SQL Server stále vrací chybovou zprávu při chybách dělení nulou nebo přetečení.
Když SETSET ARITHABORT je OFF a během vyhodnocování Booleovské podmínky IF příkazu dojde k chybě přerušení, vykoná se větev FALSCHE.
SET SET ARITHABORT musí být zapnutý, když vytváříte nebo měníte indexy na vypočítaných sloupcích nebo indexovaných pohledech. Pokud SET ARITHABORT je VYPNUTO, CREATE, UPDATE, INSERT, a příkazy DELETE na tabulkách s indexy na vypočítaných sloupcích nebo indexovaných pohledech selžou.
Nastavení se odehrává SETSET ARITHABORT při spuštění nebo běhu a ne při parse.
SET SET ARITHABORTOFF není podporován v dedikovaných SQL poolech Azure Synapse Analytics.
Pro zobrazení aktuálního nastavení pro SETSET ARITHABORT, spusťte následující dotaz:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Povolení
Vyžaduje členství ve veřejné roli .
Examples
Následující příklad ukazuje chyby dělení nulou a přetečení, které mají SET ARITHABORT nastavení.
-- 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