Fehlerbehandlung in Funktionen

11/03/2009 - 15:38 von Lutz Uhlmann | Report spam
Hallo NG!

Ich möchte mittels einer Funktion die eingebaute CONVERT-Funktion des
SQL-Servers (2005) fehlertolerant gestalten. D.h. die Funktion soll bei
einem Konvertierungsfehler einfach NULL zurückgeben:

CREATE FUNCTION dbo.funcConvertToDate
(
@sDateString VARCHAR(100),
@nDateFormat INT
)
RETURNS DATETIME
AS
BEGIN
DECLARE @dtRet DATETIME

SET @dtRet = Null

SET @dtRet = CONVERT(DATETIME, @sDateString, @nDateFormat)
IF (@@ERROR<>0)
SET @dtRet = Null

RETURN @dtRet
END

Leider funktioniert das aber nicht so, wie ich mir das vorstelle:
SELECT Zeitstempel, dbo.funcConvertToDate(Zeitstempel, 121) AS
ConvZeitstempel FROM myTable
bricht leider mit einer Fehlermeldung ab wenn Zeitstempel nicht den
vorgegebenen Konventionen entspricht, anstatt ConvZeitstempel einfach NULL
zu setzen.

Lutz
 

Lesen sie die antworten

#1 Elmar Boye
12/03/2009 - 11:30 | Warnen spam
Hallo Lutz,

Lutz Uhlmann schrieb:
Ich möchte mittels einer Funktion die eingebaute CONVERT-Funktion des
SQL-Servers (2005) fehlertolerant gestalten.



Der SQL Server löst bei allen Konvertierungsfehlern,
sei es implizit oder explizit (via CAST/CONVERT) eine
Fehlermeldung via RAISERROR aus.

In SQL Server Kreisen wurde schon mal etwas wie TRYCONVERT
vorgeschlagen, àquivalent zu den .NET Funktionen.
Nur derzeit gibt es sie nicht deswegen funktioniert das nicht.

D.h. die Funktion soll bei
einem Konvertierungsfehler einfach NULL zurückgeben:

CREATE FUNCTION dbo.funcConvertToDate
(
@sDateString VARCHAR(100),
@nDateFormat INT
)



Beste Optionen wàren derzeit: Entweder direkt im Client prüfen -
das einfachste.

Oder aber via .NET Assembly implementieren, dort existiert
mit DateTime TryParse eine Möglichkeit unterschiedliche
Datumszeichenketten zu testen.

Gruß Elmar

Ähnliche fragen