Megosztás a következőn keresztül:


SET ARITHABORT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A lekérdezés akkor szűnik meg, ha túlcsordulás vagy nullával osztó hiba jelentkezik a lekérdezés végrehajtása során.

Transact-SQL szintaxis konvenciók

Szemantika

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

Megjegyzések

Mindig állítsd be az ARITHABORT beállítást ON-ra a bejelentkezési alkalmaidban. Az ARITHABORT OFF beállítása negatívan befolyásolhatja a lekérdezések optimalizálását, ami teljesítményproblémákhoz vezethet.

Figyelmeztetés

Az SQL Server Management Studio alapértelmezett ARITHABORT beállítása ON. Az ARITHABORT OFF beállítású kliens alkalmazások eltérő lekérdezési terveket kaphatnak, ami megnehezíti a rosszul teljesítő lekérdezések hibakeresését. Vagyis ugyanaz a lekérdezés gyorsan fut a Management Studio-ban, de lassan az alkalmazásban. A Management Studio-val történő keresések hibakeresésekor mindig egyeztess az ARITHABORT kliens beállításával.

Amikor a SET ARITHABORT és az SET ANSI ALERTS bekapcsolva, ezek a hibafeltételek miatt a lekérdezés véget ér.

Amikor a SET ARITHABORT BE van kapcsolva és SET ANSI WARNINGS ki van kapcsolva, ezek a hibafeltételek miatt a batch véget ér. Ha a hibák egy tranzakcióban előfordulnak, a tranzakciót visszafordítják. Amikor a SET ARITHABORT KIKAPCSOLT és ezek közül az egyik hiba előfordul, figyelmeztető üzenet jelenik meg, és az aritmetikai művelet eredménye NULL.

Ha a SET ARITHABORT és SET ANSI WARNINGS ki vannak kapcsolva, és ezek közül valamelyik hiba előfordul, akkor figyelmeztető üzenet jelenik meg, és az aritmetikai művelet eredménye NULL.

Megjegyzés:

Ha sem a SET ARITHABORT, sem a SET ARITHIGNORE nem kapcsol be, az SQL Server visszatér NULL , és figyelmeztető üzenet jelenik meg a lekérdezés futtatása után.

Ha ANSI_WARNINGS ON értéke van, és az adatbázis kompatibilitási szintje 90 vagy annál magasabb, akkor az ARITHABORT implicit módon ON, függetlenül az értékbeállítástól. Ha az adatbázis kompatibilitási szintje 80-ra vagy annál korábban van, az ARITHABORT opciót kifejezetten ON-ra kell állítani.

Az expresszáció értékeléséhez, ha a SET ARITHABORT KIKAPCSOLVA, és egy INSERT, UPDATE vagy DELETE utasítás aritmetikai, túlcsordulás, nullával osztó vagy domain hibával találkozik, az SQL Server beilleszt vagy frissít egy NULL értéket. Ha a céloszlop nem nullable, a beadás vagy frissítés művelet sikertelen, és a felhasználó hibát lát.

Amikor a SET ARITHABORT vagy a SET ARITHIGNORE KIKAPCSOLT és SET ANSI_WARNINGS BEKAPCSOLVA, az SQL Server továbbra is hibaüzenetet ad vissza, ha nullával osztó vagy túlcsordulás hibákkal találkozik.

Amikor a SET ARITHABORT KIKAPCSOLT és megszakítási hiba történik az IF utasítás Boole-feltételének értékelése során, a FALSE ág fut.

SET ARITHABORT-nak be kell kapcsolnia, amikor indexeket hozol létre vagy változtatsz kiszámított oszlopokon vagy indexelt nézeteken. Ha a SET ARITHABORT KIKAPCSOLVA, CREATE, UPDATE, INSERT és DELETE utasítások olyan táblázatokon találhatók, ahol az indexek számított oszlopokon vagy indexelt nézeteken vannak, meghibásod.

A SET ARITHABORT beállítása végrehajtáskor vagy futásidőben történik, nem pedig parze-időben.

A SET ARITHABORT OFF nem támogatott az Azure Synapse Analytics dedikált SQL poolokban.

A SET ARITHABORT jelenlegi beállításának megtekintéséhez a következő lekérdezést hajtsa végre:

DECLARE @ARITHABORT VARCHAR(3) = 'OFF';  
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';  
SELECT @ARITHABORT AS ARITHABORT;  

Permissions

A nyilvános szerepkör tagságát igényli.

Példák

A következő példa bemutatja a nullával osztó és túlfolyó hibákat, amelyek beállításokkal SET ARITHABORT rendelkeznek.

-- 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