我有一个生产问题,基本上当同时批准超过1个用户时。用户的公司代码是相同的。它应该是独一无二的。即使我尝试使用begin tran而没有锁定,仍然有可能仍然可以复制社区代码。因为select语句在更新表之前会给出相同的数量并保持不变。有什么办法可以解决这个问题。这是脚本。谢谢。
declare @currentcompanycode as nvarchar(128)
begin tran
set @currentcompanycode = (select max(companycode) from tb_company with (nolock))
update tb_company set companycode = @currentcompanycode + 1 where companyid = @companyid
commit tran
答案 0 :(得分:1)
使公司代码成为自动增量列,让数据库完成工作。
答案 1 :(得分:0)
使用OUTPUT子句
declare @newcompanycode table
(
companycode int
)
update tb_company
set companycode = companycode + 1
output inserted.companycode
into @newcompanycode
where . . .
select * from @newcompanycode
答案 2 :(得分:0)
当你第一次选择它(公司代码)时,你需要保持对tb_company表的锁定,直到你根据你选择的值执行UPDATE:
set @currentcompanycode =
(select max(companycode) from tb_company with (HOLDLOCK, TABLOCKX))