Вопрос

В хранимой процедуре я пытаюсь проверить, равен ли параметр нулю или меньше 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top