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."

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top