当前位置: 代码迷 >> Sql Server >> 并发插入重复有关问题
  详细解决方案

并发插入重复有关问题

热度:4   发布时间:2016-04-24 10:22:35.0
并发插入重复问题
在存储过程里面用下面语句插入 主键是sid,eid,type , 并发量大的时候 重复非常大,老是在提示有重复, 有什么办法控制?

begin try
 if @value is not null
  begin
    if exists(select 1 from xxx where sid=@id and eid=@eid and type=@type)
      update xxxx
    else
      insert into xxx

  end
end try
 BEGIN CATCH    
 
      IF @@TRANCOUNT > 0    
      BEGIN    
         ROLLBACK TRAN    
      END    
RAISERROR

end CATCH   
------解决方案--------------------
难以想象的业务!
两个线程会生成相同主键的记录,而且你只通过事务让它们争先,是否可以理解为两者生成的非主键数据也是相同的?
如果相同,就没有冲突,就不需要事务了!
既然你无法在开始就充两个线程中划分操作范围,重复计算不能避免,那么重复保存也是可以接受的。
除了日志会增加,去掉事务后执行速度是有提高的。
  相关解决方案