2009-06-30 21 views
1

でRAISERRORメッセージを書式設定するストアドプロシージャで、パラメータがnullまたは1より小さいかどうかをテストし、そうであれば、フレンドリなメッセージとパラメータの値でエラーを発生させようとしています。ここで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がnullまたはゼロ、その後小さくすることはできませんです。"

または "IDはnullです.IDはnullまたはゼロ以下にすることはできません。"私はvarchar型を構築し、このようなエラーを上げる試みた

RAISERROR 27001 @message 

が、それは誤りを生成「RAISERRORに渡されたメッセージ番号27001は、SYSMESSAGESカタログに存在しません。」

答えて

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

これは私のためのメッセージとしてP​​を返します... – Charbel

2

問題はこれです:あなたは、sp_addmessageをを呼び出すことにより、データベースにカスタムエラー#を追加する必要があります。

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

あなたは上記の持っているようにあなたがしたい場合は、その後、(または、このように、RAISERRORを呼び出すことができます

RAISERROR 27001, @ID 

EDIT:(アドレッシングコメント)

まず、あなたがしている場合ので、傾斜柱あなたが)は、sp_addmessageで定義されたメッセージ文字列を使用しますSTのメッセージとして位置引数で27001を登録します。

sp_addmessage 27001, "%1" 

第二に、あなたがsp_addmessageをを使用して登録したデフォルトのメッセージを表示することを強制していません。

RAISERROR 27001 @message 
+0

これは機能しますが、私たちはすべてのプロキシで27000 - 27050の範囲を再利用します。言い換えれば、procの27001はprobのbの27001であるとは限りません。だから、sp_addmessageは私たちの選択肢ではありません。 – JamesWampler

+0

実際、sp_addmessageはオプションです(編集方法のセクションを参照)。私が知る限り、カスタムエラー番号を生成する必要があります。 – hythlodayr

関連する問題