テーブルからintを取り出してテーブルを更新する単純なストアドプロシージャがある。
これは完全なストアドプロシージャ別のSPの中からSPを呼び出すと異なる結果が出る
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つのプロセスが同時にそれを実行するときに間違った値を返さないようにすることです。
おそらく私のアプローチでそれを行うより良い方法がありますか?
あなたは 'update'で' output'節を使っていると考えましたか? –