Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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