Division by Zero: Fehlermeldung in SQL-Server bei einer Division durch 0 abfangen

Ralf Sagmeister | 6. Juli 2026

Divisionbyzero

In diesem Artikel erfahren Sie:

-verschiedene Alternativen

-die konkrete Vorgehensweise

Dann lesen Sie jetzt weiter!

Methoden zur Vorgehensweise

Die Fehlermeldung bei Divison durch 0 ist ein häufiges Problem im SQL-Server:
 

DECLARE @dividend INT
DECLARE @divisor INT

SET @dividend = 1
SET @divisor = 0
 

SELECT @dividend / @divisor
 

/*
Rückgabewert:
Meldung 8134, Ebene 16, Status 1, Zeile 7
Fehler aufgrund einer Division durch Null.
*/
 

In diesem Beitrag sollen verschiedene Möglichkeiten erörtert werden, um diese Fehlermeldung im SQL-Server bei einer Division durch 0 abzufangen. Oftmals passieren solche Fehler erst nach längerer Zeit, d. h. wenn die zugrundeliegenden Tabellen / Spalten aufgrund der Daten anwachsen. Welche Möglichkeiten gibt es, um diesen Fehler zu vermeiden?

Alternative 1: CASE
 

DECLARE @dividend INT
DECLARE @divisor INT
 

SET @dividend = 1
SET @divisor = 0
 

SELECT CASE
WHEN @divisor = 0 THEN NULL
ELSE @dividend / @divisor
END
 

/*
Rückgabewert = NULL
*/
 


Alternative 2: NULLIF
 

DECLARE @dividend INT
DECLARE @divisor INT
 

SET @dividend = 1
SET @divisor = 0
 

SELECT@dividend / NULLIF(@divisor , 0)

/*
Rückgabewert = NULL
*/


Alternative 3: NULLIF mit alternativem Rückgabewert
 

DECLARE @dividend INT
DECLARE @divisor INT
 

SET @dividend = 1
SET @divisor = 0
 

SELECT COALESCE(@dividend / NULLIF(@divisor , 0), 0)
 

/*
Rückgabewert = 0
*/

 

Alternative 4: Eine einfache Funktion

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE NAME = ‘division’) DROP FUNCTION division
go
CREATE FUNCTION dbo.division( @dividend decimal(38, 10), @divisor decimal(38, 10)) returns decimal(38, 10)
BEGIN
DECLARE @ergebnis decimal(38, 10);
SELECT @ergebnis = NULL;
IF ( @divisor IS NOT NULL
AND @divisor <> 0
AND @dividend IS NOT NULL )
SELECT @ergebnis = @dividend / @divisor;
RETURN( @ergebnis )
END
 

go


Alternative 5: ARITHABORT

Beendet eine Abfrage, wenn während der Abfrage ein Überlauffehler oder ein Fehler aufgrund einer Division durch 0 (null) auftritt.
 

SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
 

DECLARE @dividend INT
DECLARE @divisor INT
 

SET @dividend = 1
SET @divisor = 0
 

SELECT @dividend / @divisor
 

/*
Rückgabewert = NULL
*/
 

SET ARITHABORT ON
SET ANSI_WARNINGS ON
 

Die Einstellung von SET ARITHABORT wird zur Ausführungszeit und nicht zur Analysezeit festgelegt. Auch wenn SET ARITHABORT auf OFF und SET ANSI_WARNINGS auf ON festgelegt sind, gibt der SQL Server eine Fehlermeldung zurück, wenn ein Fehler aufgrund einer Division durch Null oder ein Überlauffehler auftritt. 

Um abzufragen, welche Einstellung für ARITHABORT festgelegt ist, kann man den folgenden Code ausführen:
 

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

Welche Methode nun die beste ist, kommt immer auf den vorliegenden Fall an. Sie haben Rückfragen? Dann wenden Sie sich gerne über unsere Kontaktseite oder telefonisch unter +49 7331 3076 – 0 an unsere Experten.