ZESTAW ARITHABORT (Transact-SQL)

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

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

SET ARITHABORT { ON | OFF }
[ ; ]

Uwagi

Jeśli ustawienie ARITHABORT jest włączone i ostrzeżeń ANSI ustawienie jest włączone, te warunki błędów powodują kwerendę, aby zakończyć.Jeśli ustawienie ARITHABORT jest włączone i USTAWIĆ ostrzeżeń ANSI jest wyłączona, te warunki błędów powodują partia do zakończenia.Jeżeli błędy występują w transakcji, transakcja jest cofana.Jeśli ustawienie ARITHABORT jest wyłączenie następuje jedno z tych błędów, wyświetlany jest komunikat ostrzegawczy i NULL jest przypisany do wyniku operacji arytmetycznej.

Ostrzeżenie

Jeśli zestaw ARITHABORT ani ARITHIGNORE USTAWIĆ jest zestaw, SQL Server zwraca wartość NULL i zwraca komunikat ostrzegawczy, po wykonaniu kwerendy.

Ustawienie ANSI_WARNINGS ON niejawnie ustawia ARITHABORT on, gdy zgodność bazy danych poziom jest zestaw na 90.Jeśli zestaw 80 lub starszej bazy danych zgodności poziom opcja ARITHABORT musi być jawnie zestaw na.

Podczas oceny wyrażenie po ARITHABORT USTAWIĆ OFF, jeśli INSERT, DELETE lub UPDATE instrukcja napotka błąd arytmetyczne, przepełnienia, dzielenie przez zero lub błąd domena SQL Server Wstawia lub aktualizuje wartość NULL.miejsce docelowekolumna nie jest nullable, insert lub update akcja kończy się niepowodzeniem, a użytkownik otrzymuje błąd.

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

Jeśli ustawienie ARITHABORT jest zestaw na wyłączone, wystąpi błąd przerwania podczas oceny wartość logiczna warunku Jeżeli instrukcjaFALSE oddziału zostanie wykonana.

Ustaw ARITHABORT musi być ON podczas tworzenia lub zmieniania indeksów dla kolumny obliczanej lub widoki indeksowane.Jeśli ustawienie ARITHABORT jest wyłączona, instrukcji CREATE, UPDATE, INSERT i DELETE na tabelach z indeksów dla kolumny obliczanej lub widoki indeksowane nie powiedzie się.Aby uzyskać więcej informacji o wymagane ustawienia opcji zestaw Widoki indeksowane i indeksy kolumny obliczane, zobacz Ustaw opcje, które wpływają na wyniki.

Ustawienie ustawianie ARITHABORT jest zestaw na wykonać lub czas jednostkowy i nie analizować czas.

Uprawnienia

Wymaga członkostwa w public rolę.

Przykłady

Poniższy przykład ilustruje dzielenie przez zero i przepełnienia błędów, które mają zarówno 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