Fehlermeldung in SQL-Server bei einer Division durch 0 abfangen

Division by Zero

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.

antares auf einen Blick

  • Softwareanbieter in den Bereichen Risikomanagement und Business Intelligence
  • 30-köpfiges Team bestehend aus IT- und Fachexperten
  • Eigenes Inhouse Entwicklungsteam
  • Über 30 Jahre Erfahrung in der Entwicklung von Informationssystemen
  • 3.000+ Projekte erfolgreich abgeschlossen
  • 45.000+ aktive Nutzer arbeiten täglich mit antares Informationssystemen

Unbenannt 2

Kostenlose Produkt-Demo vereinbaren

Wählen Sie Ihre gewünschte Option aus und vereinbaren Sie ein unverbindliches und kostenfreies Gespräch mit unserem Geschäftsführer Jochen Brühl.

Wir gehen auf Ihre Fragen ein und sorgen dafür, dass Sie unsere Software genau kennenlernen. Gerne zeigen wir Ihnen den Lösungsweg zu Ihren individuellen Anforderungen. Im Anschluss präsentieren wir Ihnen auf Wunsch das Leistungsspektrum unserer Software, live und direkt, per Web-Session oder persönlich bei Ihnen vor Ort.

Facebook LinkedIn