Pergunta

Em um procedimento armazenado, eu estou tentando testar se um parâmetro é nulo ou menos 1, e se assim, gerar um erro com uma mensagem amigável, e o valor do parâmetro.

Aqui está o meu 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

O que eu gostaria de volta é:

"ID é 0. ID não pode ser nulo ou menos zero." ou "ID é nulo. ID não pode ser nulo ou menos zero."

Eu tentei construir um varchar e elevar o erro como este:

RAISERROR 27001 @message

mas que produz o erro "mensagem de número 27001, passou para RAISERROR, não existe no catálogo sysmessages."

Foi útil?

Solução 2

Isso funciona, apesar de um valor @ID de NULL escreve como string vazia.

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

Outras dicas

O problema é este: Você precisa adicionar o seu erro personalizada # no banco de dados chamando sp_addmessage:

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

Você pode então chamar RAISERROR como você tem acima, ou assim (se você quiser usar a seqüência de mensagem definida em sp_addmessage):

RAISERROR 27001, @ID

EDIT: (Dirigindo comentário)

Primeiro, se você é tão inclinado apenas registrar 27001 com um argumento posicional como a mensagem:

sp_addmessage 27001, "%1"

Em segundo lugar, você não é obrigado a exibir a mensagem padrão que você registrou usando sp_addmessage; por exemplo, este deve exibir uma mensagem separada, independentemente do que a mensagem padrão é:

RAISERROR 27001 @message
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top