4

我创建了一个存储过程,它从表中的特定列中检索最后一个值,并根据文档类型和位置将其递增一。

当我单独调用此存储过程时,它可以完美运行。但是当我将它嵌套在另一个存储过程中时,该值未设置为 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。

在调用过程时尝试打印出参数的值。

另一种可能性是您没有在调用和定义中将 @FinalNumber 声明为输出参数。

我确实认为将变量命名为“whatever NUMBER”之类的名称然后使其类型为非数字是不好的做法。但是,我不认为这会导致您的问题。

于 2012-12-19T17:20:52.183 回答