1

ストアドプロシージャで、パラメータがnullまたは1未満であるかどうかをテストしようとしています。そうである場合は、わかりやすいメッセージとパラメータの値でエラーが発生します。

これが私のコードです:

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カタログに存在しません」というエラーが発生します。

4

2 に答える 2

2

問題は次のとおりです。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
于 2009-06-30T21:25:12.063 に答える
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
于 2009-07-08T16:25:37.160 に答える