Frage:
Trotz Auslösen eines RAISERROR mit Schweregrad 16 wird die Gespeicherte Prozedur nicht fehlerhaft beendet.
Lösung:
Der Schweregrad 16 beendet eine Gespeicherte Prozedur nur dann, wenn auch wirklich ein Fehler eingetreten ist.
RAISERROR löst keinen Fehler aus, sondern belegt lediglich den @@ERROR-Wert mit der angegebenen Fehlernummer.
Folgendes Skript soll das Verhalten von RAISERROR verdeutlichen:
PRINT @@ERROR
RAISERROR (‚Es ist nix passiert!‘, 16, 1)
IF @@ERROR = 0 PRINT ‚Es ist wirklich nix passiert!‘
— oder mit sp_addmessage
PRINT @@ERROR
EXEC sp_addmessage 50001, 16, N’Es ist nix passiert!‘, ‚us_english‘
RAISERROR (50001, 16, 1)
IF @@ERROR = 0
PRINT ‚Es ist wirklich nix passiert!‘
ELSE
PRINT ‚So richtig ist immer noch nix passiert, aber es hat eine Fehlernummer!‘
EXEC sp_dropmessage 50001, ‚us_english‘
GO