2009-06-30 51 views
1

在存儲過程中,我試圖測試參數是否爲null或小於1,如果是,則用友好消息和參數值引發錯誤。在SYBASE ASE 12.5中格式化RAISERROR消息

這裏是我的代碼:

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不能爲空或小於零」

「ID爲空,ID不能爲零或小於零。」

我試圖建立一個varchar和提高這樣的錯誤:「消息編號27001,傳遞給RAISERROR,在sysmessages目錄不存在」

RAISERROR 27001 @message 

但產生錯誤

回答

2

這工作,雖然NULL的@ID值作爲空字符串寫出。

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 
2

問題是這樣的:你需要通過調用的sp_addmessage添加自定義錯誤#到數據庫:

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

然後可以調用RAISERROR像你有以上,或像這樣(如果你想使用您的sp_addmessage中定義)的消息字符串:

RAISERROR 27001, @ID 

編輯:(尋址評論)

首先,如果你願意舉ST與位置參數的消息登錄27001:

sp_addmessage 27001, "%1" 

其次,你不會被迫以顯示您已經使用的sp_addmessage註冊默認的消息;例如,這應該不管默認消息是什麼,以顯示一個單獨的消息:

RAISERROR 27001 @message 
+0

這是行得通的,但我們在我們所有的過程中重複使用了範圍27000 - 27050。換句話說,proc a中的27001在概率b中不一定是27001。所以sp_addmessage不是我們的選擇。 – JamesWampler 2009-07-06 22:56:46

+0

實際上,sp_addmessage是一個選項(請參閱編輯部分以瞭解如何),並且據我所知,如果要提升任何自定義錯誤編號,則必須執行此操作。 – hythlodayr 2009-07-07 18:13:52