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
Ez a SET ARITHABORT beállítás határozza meg, hogy a lekérdezés megáll-e, ha túlcsordulás vagy nullával oszt hiba történik a lekérdezés végrehajtása során.
Ha beállítod
SET ARITHABORT ONésSET ANSI_WARNINGS OFF, az aritmetikai hibák miatt a batch véget ér. Ha a hibák egy tranzakcióban előfordulnak, a tranzakciót visszafordítják.Ha mind
SET ARITHABORTaz aritmetikaiSET ANSI_WARNINGSOFFhiba előfordul, figyelmeztető üzenet jelenik meg (kivéve,SET ARITHIGNOREha az ),ONés az aritmetikai művelet eredményeNULL.
Transact-SQL szintaxis konvenciók
Szemantika
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric, SQL database in Microsoft Fabric
SET ARITHABORT { ON | OFF }
Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa
SET ARITHABORT ON
Megjegyzések
Amikor ANSI_WARNINGS is ON (az alapértelmezett állapot), a beállításnak ARITHABORT nincs funkcionális hatása. Számtozási hibák miatt a lekérdezés véget ér, de a kötet nem szűnik meg (amíg a beállítás XACT_ABORT ).OFF Az aritmetikai hibák közé tartoznak a túlcsordulás, nullával osztó vagy tartományhibák.
Figyelmeztetés
Az SQL Server Management Studio (SSMS) alapértelmezett ARITHABORT beállítása ON, míg egy alkalmazás kliens kapcsolata alapértelmezettként ARITHABORT OFF. Még ha nincs is funkcionális különbség ANSI_WARNINGS , amíg van ON, a ARITHABORT beállítás továbbra is gyorsítótár kulcs. Ezért az SSMS és egy alkalmazás is eltérő gyorsítótárbejegyzéseket kap, és eltérő lekérdezési tervet kaphatnak, ami megnehezíti a rosszul teljesítő lekérdezések hibakeresését. Vagyis ugyanaz a lekérdezés lassabban futhat az alkalmazásban, mint az SSMS-ben. A Management Studio-val történő lekérdezések hibakeresésekor mindig egyeztess a kliens ARITHABORT beállításokkal.
Az expresszív értékeléséhez, ha mind SET ANSI_WARNINGS a és SET ARITHABORT mind OFF egy INSERT, UPDATE, vagy DELETE állítás aritmetikai hibába ütközik, a lekérdezés hozzáad 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.
A beállítás SET ARITHABORT végrehajtáskor vagy futásidőben történik, nem parse időben.
SET ARITHABORT OFFnem támogatott az Azure Synapse Analytics dedikált SQL poolokban.
Permissions
A nyilvános szerepkör tagságát igényli.
Nézze meg a jelenlegi beállítást ARITHABORT
A jelenlegi beállítás megtekintéséhez SET ARITHABORTfutassák a következő T-SQL lekérdezést:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Példák
A következő példa a nullával osztó és túlfolyó hibákat mutatja különböző SET ARITHABORT beállításokkal.
- A szkript mintatáblákat
t1hoz létre, ést2mintaadat-értékeket is beilleszt. - Állítsd
ANSI_WARNINGS ONbe és futtasd be a teszteket, hogy megnézd a nullával osztó hiba és az aritmetikai túlömlés alapértelmezett viselkedését. - Állítsuk
ANSI_WARNINGS OFFbe úgy, hogy ezARITHABORThatással van, és állítsukARITHABORT ONbe . Futtatj teszteket, hogy lássuk a viselkedést nullával osztó hibával és aritmetikai túlterheléssel. - Állítsd be mindkettőt
ANSI_WARNINGS OFFésARITHABORT OFF. Futtatj teszteket, hogy lássuk a viselkedést nullával osztó hibával és aritmetikai túlterheléssel. - Takarítsd ki a mintatáblákat.
-- SET ARITHABORT
-------------------------------------------------------------------------------
-- Create tables t1 and t2 and insert data values.
CREATE TABLE t1 (
a TINYINT,
b TINYINT
);
CREATE TABLE t2 (
a TINYINT NOT NULL
);
GO
INSERT INTO t1
VALUES (1, 0);
INSERT INTO t1
VALUES (255, 1);
GO
-- First run with ANSI_WARNINGS ON to see the default behavior.
PRINT '*** SET ANSI_WARNINGS ON';
SET ANSI_WARNINGS ON;
SET XACT_ABORT OFF; -- To make sure that we have the default setting for this option.
GO
PRINT '*** Testing divide-by-zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
PRINT 'This prints, despite the error message.';
GO
PRINT '*** Testing divide-by-zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
PRINT 'This prints, despite the error message.';
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
PRINT 'This prints, despite the error message.';
GO
PRINT '*** Resulting data - should be no data';
GO
SELECT *
FROM t2;
GO
-- Truncate table t2.
TRUNCATE TABLE t2;
GO
-- Set ANSI_WARNINGS OFF so that ARITHABORT has effect, and set ARITHABORT ON.
PRINT '*** SET ANSI_WARNINGS OFF; SET ARITHABORT ON';
GO
SET ANSI_WARNINGS OFF;
SET ARITHABORT ON;
GO
PRINT '*** Testing divide-by-zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
PRINT 'This does not print.';
GO
PRINT '*** Testing divide-by-zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
PRINT 'This does not print.';
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
PRINT 'This does not print.';
GO
PRINT '*** Resulting data - should be 0 rows';
GO
SELECT *
FROM t2;
GO
-- Truncate table t2.
TRUNCATE TABLE t2;
GO
-- Set both ANSI_WARNINGS OFF and ARITHABORT OFF.
PRINT '*** SET ARITHABORT OFF';
GO
SET ARITHABORT OFF;
GO
PRINT '*** Testing divide-by-zero during SELECT';
GO
-- Returns NULL.
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing divide-by-zero during INSERT';
GO
-- Fails with NOT NULL violation.
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
-- Fails with NOT NULL violation
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 and restore ANSI_WARNINGS
DROP TABLE t1;
DROP TABLE t2;
SET ANSI_WARNINGS ON
GO