2009-06-30 19 views
1

In einer gespeicherten Prozedur versuche ich zu testen, ob ein Parameter null oder kleiner als 1 ist, und wenn dies der Fall ist, einen Fehler mit einer freundlichen Nachricht und dem Wert des Parameters auslösen.Formatieren von RAISERROR-Nachrichten in SYBASE ASE 12.5

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 mag zurück möchte, ist entweder: "ID ist 0. ID nicht Null sein kann oder weniger als Null"

oder "ID ist null. ID kann nicht null oder weniger als null sein."

Ich habe versucht, ein varchar Aufbau und die Fehler wie folgt erhöht: „Meldungsnummer 27001, zu RAISERROR bestanden, existiert nicht in dem sysmessages Katalog“

RAISERROR 27001 @message 

aber das erzeugt den Fehler

Antwort

2

Dies 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 
+0

Dies gibt P als eine Nachricht für mich zurück ... – Charbel

2

Das Problem ist folgendes: Sie benötigen eine individuelle Fehler # in die Datenbank hinzufügen, indem sp_addmessage Aufruf:

sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero." 

Sie können RAISERROR dann nennen, wie Sie oben haben, oder so (wenn Sie möchten verwenden, um die Nachrichtenkette Sie in sp_addmessage definiert):

RAISERROR 27001, @ID 

EDIT: (Adressierung Kommentar)

Erstens, wenn Sie so geneigt ju st 27001 mit einem Positions Argument als Nachricht registrieren:

sp_addmessage 27001, "%1" 

Zweitens sind Sie nicht gezwungen, die Standardmeldung angezeigt werden, die Sie sp_addmessage registriert haben mit; zum Beispiel das sollte eine separate Meldung angezeigt werden, unabhängig davon, was die Standard-Nachricht ist:

RAISERROR 27001 @message 
+0

Dies funktioniert, aber wir verwenden die Palette von 27000 - 27050 in allen unseren Procs. Mit anderen Worten, 27001 in proc a ist nicht unbedingt 27001 in prob. Also sp_addmessage ist keine Option für uns. – JamesWampler

+0

Eigentlich ist sp_addmessage eine Option (siehe bearbeiteter Abschnitt, um zu sehen, wie) und soweit ich weiß, ist es, wenn Sie benutzerdefinierte Fehlernummern erhöhen möchten. – hythlodayr

Verwandte Themen