Domanda

In una stored procedure, sto cercando di verificare se un parametro è nullo o inferiore a 1, e in tal caso, generare un errore con un messaggio amichevole, e il valore del parametro.

Qui è il mio codice:

IF @ID IS NULL OR @ID <= 0
BEGIN
    RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
    RETURN 27001
END

Quello che vorrei di nuovo quando è:

"ID è 0. ID non può essere nullo o inferiore a zero". o "ID è nullo. ID non può essere nullo o inferiore a zero".

Ho provato la costruzione di un varchar e sollevando l'errore in questo modo:

RAISERROR 27001 @message

, ma che produce l'errore di "Messaggio numero 27001, passato a RAISERROR, non esiste nel catalogo sysmessages."

È stato utile?

Soluzione 2

Questo funziona, anche se un valore @ID NULL scrive come stringa vuota.

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

Altri suggerimenti

Il problema è questo: È necessario aggiungere la vostra abitudine errore # nel database sp_addmessage chiamando:

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

È quindi possibile chiamare RAISERROR come si dispone sopra, o come questo (se si desidera utilizzare la stringa di messaggio definito nel sp_addmessage):

RAISERROR 27001, @ID

EDIT: (commento Addressing)

In primo luogo, se siete così inclinato basta registrarsi 27001 con un argomento posizionale come il messaggio:

sp_addmessage 27001, "%1"

In secondo luogo, non si è costretti a visualizzare il messaggio di default che hai registrato utilizzando sp_addmessage; per esempio, questo dovrebbe visualizzare un messaggio separato indipendentemente da ciò che il messaggio predefinito è:

RAISERROR 27001 @message
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top