当一次有多个事务时,避免重复的最佳方法是什么?

时间:2017-12-22 01:58:58

标签: sql sql-server

我有一个生产问题,基本上当同时批准超过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 

3 个答案:

答案 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))