Форматирование сообщений RAISERROR в SYBASE ASE 12.5
-
21-08-2019 - |
Вопрос
В хранимой процедуре я пытаюсь проверить, равен ли параметр нулю или меньше 1, и если это так, выдать сообщение об ошибке с дружественным сообщением и значением параметра.
Вот мой код:
IF @ID IS NULL OR @ID <= 0
BEGIN
RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
RETURN 27001
END
То, что я хотел бы вернуть, это либо:
"Идентификатор равен 0.Идентификатор не может быть нулевым или меньше нуля ". или "Идентификатор равен нулю.Идентификатор не может быть нулевым или меньше нуля ".
Я пробовал создавать varchar и выдавать ошибку следующим образом:
RAISERROR 27001 @message
но это приводит к ошибке "Сообщение под номером 27001, переданное в RAISERROR, не существует в каталоге sysmessages".
Решение 2
Это работает, хотя значение @ID, равное NULL, записывается как пустая строка.
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
Другие советы
Проблема заключается вот в чем:Вам нужно добавить свой пользовательский номер ошибки в базу данных, вызвав sp_addmessage:
sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero."
Затем вы можете вызвать RAISERROR, как описано выше, или следующим образом (если вы хотите использовать строку сообщения, определенную вами в sp_addmessage):
RAISERROR 27001, @ID
Редактировать:(Обращаясь к комментарию)
Во-первых, если вы так склонны, просто зарегистрируйте 27001 с позиционным аргументом в качестве сообщения:
sp_addmessage 27001, "%1"
Во-вторых, вас не заставляют отображать сообщение по умолчанию, которое вы зарегистрировали с помощью sp_addmessage;например, при этом должно отображаться отдельное сообщение независимо от того, какое сообщение используется по умолчанию:
RAISERROR 27001 @message