从另一个SP中调用SP会得到不同的结果

时间:2017-05-24 07:36:06

标签: sql-server stored-procedures

我有一个简单的存储过程,从表中获取一个int并更新表 这是完整的存储过程

create procedure spGetNewVMacsBatchNumber as
begin
    set nocount on
    declare @LastUsedVMacsBatchNumber int

    update tblSettings with (TABLOCK)
    set    LastUsedVMacsBatchNumber = isnull(LastUsedVMacsBatchNumber, 0) + 1,
           @LastUsedVMacsBatchNumber = isnull(LastUsedVMacsBatchNumber, 0) + 1

    select @LastUsedVMacsBatchNumber
end;

当我从SSMS运行它时,它完成了我对它的期望,返回数字+ 1并更新表格 我在SSMS中称之为:

declare @BatchNumber int
exec @BatchNumber = spGetNewVMacsBatchNumber

但是当我从另一个存储过程中调用它时,它不返回我期望的值,但总是返回零。其他存储过程中的调用与上面的完全相同。

如何从另一个存储过程调用此存储过程并仍然获得我期望的值?

spGetNewVMacsBatchNumber的想法是检索当前值+ 1并确保当2个进程同时运行它时它不会返回错误的值。
也许有更好的方法可以做到这一点呢?

1 个答案:

答案 0 :(得分:3)

您实际上应该使用import json data = json.loads(request.body) print data['PCTestScores'] for values in data['PCTestScores']: print values print values['PCId'] print values['PCName'] print values['Percentage'] print values['MaxScore'] print values['YourScore'] 进行手术。

output parameters

然后像这样称呼它:

alter procedure spGetNewVMacsBatchNumber @ReturnVal int output as
begin
    set nocount on
    declare @LastUsedVMacsBatchNumber int

    update tblSettings with (TABLOCK)
    set    LastUsedVMacsBatchNumber = isnull(LastUsedVMacsBatchNumber, 0) + 1,
           @LastUsedVMacsBatchNumber = isnull(LastUsedVMacsBatchNumber, 0) + 1

    select @ReturnVal = @LastUsedVMacsBatchNumber
end;

您正在获取declare @BatchNumber int exec spGetNewVMacsBatchNumber @ReturnVal= @BatchNumber output; select @BatchNumber 存储过程的return status,而不是来自存储过程的实际“返回值”