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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top