我有一个生产问题,基本上当同时批准超过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
当您第一次选择它的MAX(公司代码)时,您需要保持对tb_company表的锁定,直到您根据所选的值执行UPDATE:
set @currentcompanycode =
(select max(companycode) from tb_company with (HOLDLOCK, TABLOCKX))
使公司代码成为自动增量列,让数据库完成工作。
使用OUTPUT子句
declare @newcompanycode table
(
companycode int
)
update tb_company
set companycode = companycode + 1
output inserted.companycode
into @newcompanycode
where . . .
select * from @newcompanycode