Formateo de mensajes RAISERROR en SYBASE ASE 12.5
-
21-08-2019 - |
Pregunta
En un procedimiento almacenado, estoy tratando de probar si un parámetro es nulo o inferior a 1, y si es así, generar un error con un mensaje amable, y el valor del parámetro.
Aquí está mi código:
IF @ID IS NULL OR @ID <= 0
BEGIN
RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
RETURN 27001
END
Lo que me gustaría volver puede ser:
"ID es 0. ID no puede ser nulo o inferior a cero." o "ID es nulo. ID no puede ser nulo o inferior a cero."
He intentado construir un varchar y elevar el error como este:
RAISERROR 27001 @message
pero que produce el error "Mensaje Nº 27001, pasó a RAISERROR, no existe en el catálogo de mensajes del sistema."
Solución 2
Esto funciona, aunque un valor de NULL @ID escribe como una cadena vacía.
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
Otros consejos
El problema es el siguiente: Es necesario añadir su error personalizado # en la base de datos sp_addmessage llamando a:
sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero."
A continuación, puede llamar a RAISERROR que tienes arriba, o como esto (si desea utilizar la cadena del mensaje que ha definido en sp_addmessage):
RAISERROR 27001, @ID
EDIT: (Dirigiéndose comentario)
En primer lugar, si usted está tan inclinado registrate 27001 con un argumento posicional como el mensaje:
sp_addmessage 27001, "%1"
En segundo lugar, usted no está obligado a mostrar el mensaje predeterminado que se registró con sp_addmessage; por ejemplo, esto debería mostrar un mensaje separado independientemente de lo que el mensaje por defecto es:
RAISERROR 27001 @message