2009-06-30 6 views
1

В хранимой процедуре я пытаюсь проверить, является ли параметр нулевым или меньше 1, и если это так, поднимите ошибку с дружественным сообщением и значением параметра.Форматирование сообщений RAISERROR в SYBASE ASE 12.5

Вот мой код:

IF @ID IS NULL OR @ID <= 0 
BEGIN 
    RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.' 
    RETURN 27001 
END 

То, что я хотел бы вернуться либо:

"ID 0. ID не может быть пустым или меньше нуля." или «Идентификатор равен нулю. Идентификатор не может быть нулем или меньше нуля».

Я пытался строить VARCHAR и поднимая ошибку, как это: «Сообщение номер 27001, переданную RAISERROR, не существует в каталоге sysmessages»

RAISERROR 27001 @message 

но производит ошибку

ответ

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 
+0

Это возвращает P как сообщение для меня ... – Charbel

2

Проблема заключается в следующем: Вы должны добавить пользовательскую ошибку # в базу данных по телефону sp_addmessage:

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

Вы можете позвонить RAISERROR, как у вас выше, или, как это (если вы хотите использовать строку сообщения, которую вы определили в sp_addmessage):

RAISERROR 27001, @ID 

EDIT: (Обращается комментарий)

во-первых, если вы так склонны дзю й регистр 27001 с позиционной аргумент как сообщение:

sp_addmessage 27001, "%1" 

Во-вторых, вы не обязаны отображать сообщение по умолчанию, что вы зарегистрированы с помощью sp_addmessage; например, это должно отобразить отдельное сообщение, независимо от того, что сообщение по умолчанию:

RAISERROR 27001 @message 
+0

Это действительно работает, но мы повторно используем диапазон 27000 - 27050 во всех наших процессах. Другими словами, 27001 в proc a не обязательно 27001 в вопросе b. Поэтому sp_addmessage не является для нас вариантом. – JamesWampler

+0

Собственно, sp_addmessage - это опция (см. Отредактированный раздел, чтобы узнать, как это сделать), и, насколько я знаю, это необходимо, если вы хотите поднять любые пользовательские номера ошибок. – hythlodayr