La formattazione dei messaggi RAISERROR in Sybase ASE 12.5
-
21-08-2019 - |
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."
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