このコードは、SQL Server 2008 のストアド プロシージャでした。
select @pkvalue = maxkey + 1, @id = id
from dbo.sys_maxkey
where tablename = UPPER(@tablename) and keyname = UPPER(@fieldname) and ds_id = @ds_id
update dbo.sys_maxkey with (updlock)
set maxkey = maxkey + 1
where id = @id
このコードは主キーを取得し、すべてのテーブルの最大主キーが格納されているテーブルから最大キーを見つけますが、問題があります。同時実行性が高い場合、おそらく 2 人以上の人が同時に行を読み取る可能性があります ( uplock を追加)、同じ値を更新してデータを挿入すると、エラーが発生します。回避するにはどうすればよいですか?