此代码是 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
这段代码是获取一个主键,它从一个存储了所有表的最大主键的表中找到最大键,但是它有一个问题,当并发高时,可能两个人会同时读取一行(即使我们加uplock),和相同的值更新插入数据,报错,如何避免?