Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Kończy zapytanie, gdy podczas wykonywania zapytania wystąpi błąd przepełnienia lub podziału przez zero.
Transact-SQL konwencje składni
Składnia
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
Uwagi
Zawsze ustawiaj ARITHABORT na ON podczas sesji logowania. Ustawienie ARITHABORT na OFF może negatywnie wpłynąć na optymalizację zapytań, prowadząc do problemów z wydajnością.
Ostrzeżenie
Domyślne ustawienie ARITHABORT dla SQL Server Management Studio jest WŁĄCZONE. Aplikacje klienckie ustawiające ARITHABORT na OFF mogą otrzymywać różne plany zapytań, co utrudnia rozwiązywanie słabo działających zapytań. To znaczy, to samo zapytanie może działać szybko w Management Studio, ale wolno w aplikacji. Podczas rozwiązywania zapytań za pomocą Management Studio zawsze dostosuj ustawienia ARITHABORT na kliencie.
Gdy SET ARITHABORT i SET ANSI WARNINGS są włączone, te warunki błędu powodują zakończenie zapytania.
Gdy USTAW ARITHABORT jest włączone, a USTAW ANSI OSTRZEŻENIE wyłączone, te błędy powodują zakończenie partii. Jeśli błędy wystąpią w transakcji, transakcja jest cofana do tyłu. Gdy USTAW ARITHABORT jest wyłączone i pojawi się jeden z tych błędów, pojawia się komunikat ostrzegawczy i wynik operacji arytmetycznej to NULL.
Jeśli SET ARITHABORT i SET ANSI WARNINGS są wyłączone i wystąpi jeden z tych błędów, pojawia się komunikat ostrzegawczy, a wynik operacji arytmetycznej to NULL.
Uwaga / Notatka
Jeśli ani SET ARITHABORT, ani SET ARITHIGNORE nie są włączone, SQL Server zwraca sygnał NULL i po wykonaniu zapytania pojawia się komunikat ostrzegawczy.
Gdy ANSI_WARNINGS ma wartość ON, a poziom kompatybilności bazy danych jest ustawiony na 90 lub wyższy, ARITHABORT jest domyślnie ON, niezależnie od ustawienia wartości. Jeśli poziom kompatybilności bazy danych jest ustawiony na 80 lub wcześniejszy, opcja ARITHABORT musi być wyraźnie ustawiona na ON.
Do oceny wyrażeń, jeśli SET ARITHABORT jest WYŁĄCZONE, a instrukcje INSERT, UPDATE lub DELETE napotkają arytmetykę, przepełnienie, dzielenie przez zero lub błąd domeny, SQL Server wstawia lub aktualizuje wartość NULL . Jeśli kolumna docelowa nie jest unieważnialna, akcja wstawienia lub aktualizacji kończy się niepowodzeniem i użytkownik widzi błąd.
Gdy SET ARITHABORT lub SET ARITHIGNORE są WYŁĄCZONE, a SET ANSI_WARNINGS włączone, SQL Server nadal zwraca komunikat o błędzie przy wystąpieniu błędów dzielenia przez zero lub przepełnienia.
Gdy SET ARITHABORT jest WYŁĄCZONY i podczas oceny warunku boolowskiego instrukcji IF wystąpi błąd przerwania, wykonana jest gałąź FALSE.
USTAW ARITHABORT musi być włączony, gdy tworzysz lub zmieniasz indeksy w kolumnach obliczeniowych lub widokach indeksowanych. Jeśli instrukcje SET ARITHABORT są wyłączone, CREATE, UPDATE, INSERT i DELETE w tabelach z indeksami w kolumnach obliczeniowych lub indeksowanych widokach zawodzą.
Ustawienie SET ARITHABORT następuje podczas wykonywania lub działania, a nie w czasie parsowania.
SET ARITHABORT OFF nie jest obsługiwany w dedykowanych pulach SQL w Azure Synapse Analytics.
Aby zobaczyć aktualne ustawienie dla SET ARITHABORT, wykonaj następujące zapytanie:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Permissions
Wymaga członkostwa w publicznej roli .
Przykłady
Poniższy przykład demonstruje błędy dzielenia przez zero i przepełnienia, które mają 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