Udostępnij za pośrednictwem


SET ARITHABORT (Transact-SQL)

Kończy kwerendę, gdy błąd dzielenia przez zero lub przepełnienie programu odbywa się podczas wykonywania kwerendy.

Topic link iconKonwencje składni języka Transact-SQL

SET ARITHABORT { ON | OFF }
[ ; ]

Remarks

zestaw ARITHABORT jest włączone i zestaw ostrzeżenia ANSI jest włączone, te warunki błędów spowodować kwerendę, aby zakończyć.zestaw ARITHABORT jest włączone i zestaw ostrzeżenia ANSI jest wyłączona, te warunki błędów spowodować partia zakończyć.Jeżeli błędy występują w transakcji, transakcja jest cofana.Jeśli ARITHABORT zestaw jest wyłączona, a zachodzi jeden z tych błędów, wyświetlany jest komunikat ostrzegawczy, a wartość NULL jest przypisany do wyniku operacji arytmetycznej.

Uwaga

Jeśli ustawiono zestaw ARITHABORT ani ARITHIGNORE zestaw SQL Server Zwraca wartość NULL, a następnie zwraca komunikat ostrzegawczy, po wykonaniu kwerendy.

ting zestaw ANSI_WARNINGS do ON niejawnie zestaw s ARITHABORT on, gdy poziom zgodności bazy danych jest zestaw 90.Jeśli poziom zgodności bazy danych jest ustawiony na 80 lub wcześniej, opcja ARITHABORT musi być jawnie ustawiona na ON.

Podczas oceny wyrażenie, gdy ARITHABORT zestaw jest wyłączona, jeśli INSERT instrukcja DELETE lub UPDATE napotka błąd arytmetyczne, przepełnienie, dzielenie przez zero lub błąd domena, SQL Server Wstawia lub aktualizuje wartości NULL. Jeśli kolumna miejsce docelowe nie jest pustych, insert lub aktualizacja akcja zakończy się niepowodzeniem, a użytkownik otrzymuje błąd.

Jeśli ARITHABORT zestaw lub zestaw ARITHIGNORE jest wyłączona i zestaw ANSI_WARNINGS jest włączone, SQL Server nadal zwraca komunikat o błędzie, gdy wystąpią błędy dzielenie przez zero lub przepełnienie.

zestaw ARITHABORT ma wartość OFF, wystąpi błąd przerwania podczas przeprowadzania oceny warunków logicznych instrukcja IF, zostanie wykonana gałąź ma wartość FAŁSZ.

zestaw ARITHABORT musi być włączone, podczas tworzenia lub zmieniania indeksów dla kolumny obliczanej lub widoków indeksowanych.zestaw ARITHABORT jest wyłączona, nie będzie instrukcji CREATE, UPDATE, INSERT i DELETE na tabelach z indeksów dla kolumny obliczanej lub widoków indeksowanych.Aby uzyskać więcej informacji dotyczących wymaganych ustawień opcji zestaw z widoków indeksowanych i indeksów na kolumny obliczane zobacz SET Options That Affect Results.

Ustawiono zestaw ARITHABORT na wykonać lub uruchomić czas, a nie w czasie analizowania.

Uprawnienia

Członkostwo w grupie wymaga publiczne roli.

Przykłady

W poniższym przykładzie zademonstrowano dzielenie przez zero i przepełnienia błędów, które zostały jednocześnie SET ARITHABORT ustawienia.

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