RAISERROR

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

/* übernommen aus der Original sqlfaq.de */