4

テーブルの特定の列から最後の値を取得し、ドキュメントの種類と場所に基づいて値を 1 ずつ増やすストアド プロシージャを作成しました。

このストアド プロシージャを単独で呼び出すと、完全に機能します。しかし、別のストアド プロシージャにネストすると、値が variable に設定されません@TempLastGeneratedNumber。別のプロシージャ内でストアド プロシージャを呼び出したときに、その値を出力@TempLastGeneratedNumberすると空になります。

しかし、ストアド プロシージャを単独で呼び出すと、正しい値が得られます。

これは私のストアドプロシージャです

    Create Procedure [GenerateDocumentNo]
        @Document_Type varchar(max) = null,
        @Location_Id int = null
        @FinalNumber varchar(max) = null output
    as
    begin try
    begin tran

    Declare @TempLastGeneratedNumber varchar(max)

    if (@Document_Type = 'Apple')
    BEGIN
    Select top(1) @TempLastGeneratedNumber = Code from Apple_Details_tbl where Location_Id = @Location_Id  order by Id desc
    END

    else if (@Document_Type = 'Mango')
    BEGIN
    Select top(1) @TempLastGeneratedNumber = Code from Mango_Details_tbl where Location_Id = @Location_Id order by Id desc
    END


    if(@TempLastGeneratedNumber is not null or @TempLastGeneratedNumber != '')
    BEGIN

    Set @FinalNumber = @TempLastGeneratedNumber + 1
    END

    commit tran
    end try

    begin catch
    PRINT ERROR_MESSAGE()
    if
    end catch

上記のストアドプロシージャの問題と、これを解決する方法を教えてください。

4

1 に答える 1

1

クエリが値を返さないか、NULL値を返すため、値がNULLである可能性があります。

おそらく、これは@Document_Typeが「Apple」でも「Mango」でもないためです。または、location_idがテーブルにないためです。または、code最大IDがNULLであるため。

プロシージャを呼び出すときに、引数の値を出力してみてください。

もう1つの可能性は、@FinalNumberを呼び出しおよび定義の出力パラメーターとして宣言していないことです。

変数に「whateverNUMBER」のような名前を付けてから、その型を数値以外にするのは悪い習慣だと思います。しかし、私はこれがあなたの問題を引き起こしているわけではありません。

于 2012-12-19T17:20:52.183 に答える