RAISERROR in Funktion

09/04/2009 - 17:33 von Thomas Schremser | Report spam
Hallo allerseits!

In einer Funktion möchte ich prüfen, ob ein übergebener Parameter innerhalb
des zulàssigen Wertebreichs liegt und falls nicht, einen Fehler auslösen.
Dies hàtte ich so versucht:

CREATE FUNCTION dbo.Quartalserster
(
@Quartal int,
@Jahr int
)
RETURNS datetime
AS
BEGIN
IF NOT @Quartal BETWEEN 1 AND 4
BEGIN
RAISERROR('Das Quartal muß zwischen 1 und 4 sein.', 16, 1)
RETURN NULL
END

RETURN DATEADD(year, @Jahr - 2000,
DATEADD(month, 3 * (@Quartal - 1), '20000101'))
END

Das schlàgt allerdings mit folgender Meldung fehl:

Meldung 443, Ebene 16, Status 14, Prozedur Quartalserster, Zeile 13
Ungültige Verwendung des Operators mit Nebenwirkungen oder
Zeitabhàngigkeit in 'RAISERROR' innerhalb einer Funktion.

Was mache ich hier falsch?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler
 

Lesen sie die antworten

#1 Elmar Boye
09/04/2009 - 18:07 | Warnen spam
Hallo Thomas,

"Thomas Schremser" schrieb...
In einer Funktion möchte ich prüfen, ob ein übergebener Parameter innerhalb
des zulàssigen Wertebreichs liegt und falls nicht, einen Fehler auslösen.



Funktionen sind zunàchst einmal für den Einsatz in SQL Anweisungen
wie SELECT gedacht.
Und dort würde ein RAISERROR bei der Verarbeitung nicht besonders
gut ankommen. Und so akzeptiert der SQL Server dies nicht.


Dies hàtte ich so versucht:

CREATE FUNCTION dbo.Quartalserster



Ändere es als in eine Prozedur mit dem Datetime als Ausgabe-Parameter.

(
@Quartal int,
@Jahr int



, @Datum datetime OUT

)

AS
BEGIN
IF NOT @Quartal BETWEEN 1 AND 4



Quartal könnte z. B. auch NULL sein:
IF @Quartal IS NULL OR NOT @Quartal BETWEEN 1 AND 4

BEGIN
RAISERROR('Das Quartal muß zwischen 1 und 4 sein.', 16, 1)
RETURN NULL
END




Das Jahr würde ich ebenfalls prüfen...


SET @Datum = DATEADD(year, @Jahr - 2000,

DATEADD(month, 3 * (@Quartal - 1), '20000101'))
END




Gruß Elmar

Ähnliche fragen