Ich habe eine gespeicherte Prozedur, die eine Parametervalidierung durchführt und fehlschlagen und die Ausführung stoppen sollte, wenn der Parameter nicht gültig ist.Der "richtige" Weg zur Überprüfung der gespeicherten Prozedurparameter
Mein erster Ansatz für die Fehlerprüfung sah wie folgt aus:
create proc spBaz
(
@fooInt int = 0,
@fooString varchar(10) = null,
@barInt int = 0,
@barString varchar(10) = null
)
as
begin
if (@fooInt = 0 and (@fooString is null or @fooString = ''))
raiserror('invalid parameter: foo', 18, 0)
if (@barInt = 0 and (@barString is null or @barString = ''))
raiserror('invalid parameter: bar', 18, 0)
print 'validation succeeded'
-- do some work
end
Dies tat nicht den Trick seit Schwere 18 nicht die Ausführung stoppen und ‚Überprüfung erfolgreich‘ gedruckt wird, zusammen mit den Fehlermeldungen.
Ich weiß, dass ich einfach eine Rückkehr nach jedem raiserror hinzufügen könnte, aber das sieht irgendwie hässlich zu mir:
if (@fooInt = 0 and (@fooString is null or @fooString = ''))
begin
raiserror('invalid parameter: foo', 18, 0)
return
end
...
print 'validation succeeded'
-- do some work
Da Fehler mit Schweregrad 11 und höher innerhalb eines try/catch-Block einen anderen Ansatz gefangen ich getestet war, meine Fehlerprüfung innerhalb eines solchen try/catch-Blocks einzukapseln. Das Problem war, dass der Fehler verschluckt und nicht an den Client gesendet wurde. So habe ich einige der Forschung und fand einen Weg, um rethrow den Fehler:
ich mit diesem Ansatz immer noch nicht zufrieden bin so frag ich dich:
Wie sieht Ihre Parametervalidierung aus? Gibt es eine Art "Best Practice" für diese Art der Überprüfung?
Gibt es einen Grund, warum Sie IF (ISNULL (@fooString, '') = '') statt IF (@fooString ist Null) verwendet? – macleojw
@ makleojw: Er sucht nach Null und '' gleichzeitig .. clever :) – VVS
Der zweite Validator hat ungültige Syntax: 'RAISEERROR'. Es sollte nur ein "e" geben. Lustig ist, dass es im Englischen korrekt ist, da 'raise + error' doppelt 'e' hat, aber nicht in MS SQL. –