A formatação de mensagens RAISERROR no Sybase ASE 12.5
-
21-08-2019 - |
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."
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