Formatieren RAISERROR Nachrichten in Sybase ASE 12.5
-
21-08-2019 - |
Frage
In einer gespeicherten Prozedur, ich versuche, zu testen, ob ein Parameter null oder weniger als 1, und wenn ja, einen Fehler mit einer freundlichen Nachricht zu erhöhen, und der Wert des Parameters.
Hier ist mein Code:
IF @ID IS NULL OR @ID <= 0
BEGIN
RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
RETURN 27001
END
Was ich möchte zurück entweder:
"ID ist 0. ID nicht Null sein kann oder weniger als Null." oder "ID ist null. ID nicht Null sein kann oder weniger als Null."
Ich habe versucht, ein varchar Aufbau und die Fehler wie folgt erhöht:
RAISERROR 27001 @message
, aber das erzeugt die Fehler "Meldungsnummer 27001, zu RAISERROR bestanden, existiert nicht in dem sysmessages Katalog."
Lösung 2
Das funktioniert, obwohl ein @ID Wert von NULL als leere Zeichenkette schreibt.
IF @ID IS NULL OR @ID <= 0
BEGIN
DECLARE @msg varchar(250)
SELECT @msg = 'ID is ' + Convert(varchar(15), @ID) + '. Value cannot be null or less then zero'
RAISERROR 27001 @msg
RETURN 27001
END
Andere Tipps
Das Problem ist folgendes: Sie benötigen eine individuelle Fehler # in die Datenbank durch den Aufruf sp_addmessage hinzuzufügen:
sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero."
Sie können dann RAISERROR nennen, wie Sie oben haben, oder so (wenn Sie die Nachrichtenzeichenfolge Sie in sp_addmessage definiert verwenden):
RAISERROR 27001, @ID
EDIT: (Adressierung Kommentar)
Erstens, wenn Sie so geneigt sind nur registrieren 27001 mit einem Positions Argumente als Nachricht an:
sp_addmessage 27001, "%1"
Zweitens sind Sie nicht gezwungen, die Standardmeldung angezeigt, die Sie sich registriert haben mit sp_addmessage; zum Beispiel das sollte eine separate Meldung angezeigt werden, unabhängig davon, was die Standard-Nachricht lautet:
RAISERROR 27001 @message