SET ARITHABORT (Transact-SQL)SET ARITHABORT (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Beendet eine Abfrage, wenn während der Abfrage ein Überlauffehler oder ein Fehler aufgrund einer Division durch Null auftritt.Ends a query when an overflow or divide-by-zero error occurs during query execution.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database
  
SET ARITHABORT { ON | OFF }
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse

SET ARITHABORT ON

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

BemerkungenRemarks

Legen Sie ARITHABORT in Ihren Anmeldesitzungen immer auf ON fest.Always set ARITHABORT to ON in your logon sessions. Wenn ARITHABORT auf OFF festgelegt wird, kann dies negative Auswirkungen auf die Abfrageoptimierung haben und zu Leistungsproblemen führen.Setting ARITHABORT to OFF can negatively impact query optimization, leading to performance issues.

Warnung

Der Standardwert der ARITHABORT-Einstellung für SQL Server Management StudioSQL Server Management Studio ist ON.The default ARITHABORT setting for SQL Server Management StudioSQL Server Management Studio is ON. Wenn ARITHABORT für Clientanwendungen auf OFF festgelegt ist, können diese unterschiedliche Abfragepläne empfangen, was die Problembehandlung von Abfragen mit schlechter Leistung erschwert.Client applications setting ARITHABORT to OFF might receive different query plans, making it difficult to troubleshoot poorly performing queries. Das heißt, dieselbe Abfrage könnte in Management Studio schnell, in der Anwendung jedoch langsam ausgeführt werden.That is, the same query might execute fast in management studio but slow in the application. Gleichen Sie die ARITHABORT-Einstellung des Clients bei der Problembehandlung von Abfragen mit Management StudioManagement Studio immer ab.When troubleshooting queries with Management StudioManagement Studio, always match the client ARITHABORT setting.

Wenn SET ARITHABORT und SET ANSI WARNINGS auf ON festgelegt sind, bewirken diese Fehlerbedingungen, dass die Abfrage beendet wird.When SET ARITHABORT and SET ANSI WARNINGS are ON, these error conditions cause the query to end.

Wenn SET ARITHABORT auf ON und SET ANSI WARNINGS auf OFF festgelegt ist, bewirken diese Fehlerbedingungen, dass der Batch beendet wird.When SET ARITHABORT is ON and SET ANSI WARNINGS is OFF, these error conditions cause the batch to end. Treten die Fehler in einer Transaktion auf, so wird für die Transaktion ein Rollback durchgeführt.If the errors occur in a transaction, the transaction is rolled back. Wenn SET ARITHABORT auf OFF festgelegt ist und einer dieser Fehler auftritt, wird eine Warnmeldung angezeigt, und das Ergebnis der arithmetischen Operation ist NULL.When SET ARITHABORT is OFF and one of these errors occurs, a warning message appears and the result of the arithmetic operation is NULL.

Wenn SET ARITHABORT und SET ANSI WARNINGS auf OFF festgelegt sind und einer dieser Fehler auftritt, wird eine Warnmeldung angezeigt, und das Ergebnis der arithmetischen Operation ist NULL.If SET ARITHABORT and SET ANSI WARNINGS are OFF and one of these errors occurs, a warning message appears, and the result of the arithmetic operation is NULL.

Hinweis

Wenn weder SET ARITHABORT noch SET ARITHIGNORE auf ON festgelegt sind, gibt SQL ServerSQL Server NULL zurück, und nach Ausführung der Abfrage wird eine Warnmeldung zurückgegeben.If neither SET ARITHABORT nor SET ARITHIGNORE is ON, SQL ServerSQL Server returns NULL and a warning message appears after the query runs.

Wenn ANSI_WARNINGS den Wert „ON“ aufweist und der Datenbank-Kompatibilitätsgrad auf 90 oder höher festgelegt ist, wird ARITHABORT unabhängig von den Werteinstellungen auf „ON“ festgelegt.When ANSI_WARNINGS has a value of ON and the database compatibility level is set to 90 or higher then ARITHABORT is implicitly ON regardless of its value setting. Wird der Kompatibilitätsgrad der Datenbank auf 80 oder niedriger festgelegt, muss die ARITHABORT-Option explizit auf ON festgelegt werden.If the database compatibility level is set to 80 or earlier, the ARITHABORT option must be explicitly set to ON.

Wenn bei der Auswertung eines Ausdrucks SET ARITHABORT auf OFF festgelegt ist und es in einer INSERT-, DELETE- oder UPDATE-Anweisung zu einem arithmetischen, Überlauf-, Division durch Null- oder Domänenfehler kommt, fügt SQL ServerSQL Server einen NULL-Wert ein oder aktualisiert diesen.For expression evaluation, if SET ARITHABORT is OFF and an INSERT, UPDATE, or DELETE statement comes across an arithmetic, overflow, divide-by-zero, or domain error, SQL ServerSQL Server inserts or updates a NULL value. Wenn die Zielspalte keine NULL-Werte zulässt, schlägt das Einfügen oder Aktualisieren fehl, und dem Benutzer wird ein Fehler angezeigt.If the target column isn't nullable, the insert or update action fails and the user sees an error.

Auch wenn SET ARITHABORT oder SET ARITHIGNORE auf OFF und SET ANSI_WARNINGS auf ON festgelegt sind, gibt SQL ServerSQL Server eine Fehlermeldung zurück, wenn ein Fehler aufgrund einer Division durch Null oder ein Überlauffehler auftritt.When either SET ARITHABORT or SET ARITHIGNORE is OFF and SET ANSI_WARNINGS is ON, SQL ServerSQL Server still returns an error message when encountering divide-by-zero or overflow errors.

Wenn SET ARITHABORT auf OFF festgelegt ist und bei der Auswertung der booleschen Bedingung einer IF-Anweisung ein Abbruchfehler auftritt, wird der FALSE-Zweig ausgeführt.When SET ARITHABORT is OFF and an abort error occurs during the evaluation of the Boolean condition of an IF statement, the FALSE branch executes.

SET ARITHABORT muss beim Erstellen oder Ändern von Indizes für berechnete Spalten oder indizierte Sichten auf ON festgelegt sein.SET ARITHABORT must be ON when you're creating or changing indexes on computed columns or indexed views. Wenn SET ARITHABORT auf OFF festgelegt ist, schlagen die CREATE-, UPDATE-, INSERT- und DELETE-Anweisungen in Tabellen mit Indizes auf berechneten Spalten oder indizierten Sichten fehl.If SET ARITHABORT is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views fail.

Das Festlegen von SET ARITHABORT erfolgt zur Laufzeit, nicht zur Analysezeit.The setting of SET ARITHABORT happens at execute or run time and not at parse time.

Um die aktuelle Einstellung für SET ARITHABORT anzuzeigen, führen Sie die folgende Abfrage aus:To view the current setting for SET ARITHABORT, run the following query:

DECLARE @ARITHABORT VARCHAR(3) = 'OFF';  
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';  
SELECT @ARITHABORT AS ARITHABORT;  
  

BerechtigungenPermissions

Erfordert die Mitgliedschaft in der public -Rolle.Requires membership in the public role.

BeispieleExamples

Im folgenden Beispiel werden die Fehler aufgrund einer Division durch Null und Überlauffehler mit SET ARITHABORT-Einstellungen veranschaulicht.The following example demonstrates the divide-by-zero and overflow errors that have SET ARITHABORT settings.

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

Weitere InformationenSee Also

SET-Anweisungen (Transact-SQL) SET Statements (Transact-SQL)
SET ARITHIGNORE (Transact-SQL) SET ARITHIGNORE (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)SESSIONPROPERTY (Transact-SQL)