我有一个简单的存储过程,从表中获取一个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个进程同时运行它时它不会返回错误的值。
也许有更好的方法可以做到这一点呢?
答案 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
,而不是来自存储过程的实际“返回值”。