Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套存储过程中的SQL变量_Sql_Sql Server - Fatal编程技术网

嵌套存储过程中的SQL变量

嵌套存储过程中的SQL变量,sql,sql-server,Sql,Sql Server,我创建了一个存储过程,它从表中的特定列中检索最后一个值,并根据文档类型和位置将其递增1 当我单独调用这个存储过程时,它工作得非常好。但当我将其嵌套在另一个存储过程中时,该值没有设置为变量@TempLastGeneratedNumber。在另一个过程中调用存储过程时,如果打印@TempLastGeneratedNumber的值,则该值为空 但是当我单独调用存储过程时,我得到了正确的值 这是我的存储过程 Create Procedure [GenerateDocumentNo]

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

当我单独调用这个存储过程时,它工作得非常好。但当我将其嵌套在另一个存储过程中时,该值没有设置为变量
@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

因此,请帮助我解决上述存储过程中的问题以及如何解决此问题?

值很可能为NULL,因为查询没有返回任何值或返回NULL值

这大概是因为@Document_Type既不是“Apple”也不是“Mango”。或者,因为位置_id不在表中。或者,因为最大id上的
code
为空

调用过程时,请尝试打印参数的值

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


我确实认为将变量命名为“任意数字”,然后将其类型设置为非数字是一种不好的做法。但是,我不认为这会导致您的问题。

SQL只是结构化查询语言—许多数据库系统都使用这种语言,但不是数据库产品。。。很多东西都是特定于供应商的-因此我们确实需要知道您使用的是什么数据库系统(以及哪个版本)…所以您的
@TempLastGeneratedNumber
类型是
varchar(max)
-然后您向其中添加一个<代码>设置@FinalNumber=@TempLastGeneratedNumber+1-这应该如何工作?但我并没有从表中检索TempLastGeneratedNumber的初始值。选择top(1)@TempLastGeneratedNumber=Code from Apple_Details_tbl(1)这些调用看起来像什么?(2) 您应该将@TempLastGeneratedNumber的类型设置为整数。(3) 为什么不使用标识栏?@Gordon Linoff我不能使用标识栏,因为总共有50个不同的位置,代码应该根据位置增加一个。感谢Gordon Linoff的快速建议。但我早就试过了。我的@Document_类型和我的代码都不是空的。我还将FinalNumber声明为父存储过程中的输出。不过,我也认为我的max代码为null,但如果是,我已将其硬编码为1。(在else条件下进行了修改,在该条件下,我检查了TempDocumentNumber是否为null或“”)