本帖最后由 jkshu 于 2013-09-04 11:48:37 编辑

解决方案 »

  1.   

    解决方法是A表中设置一个主键 然后插入的时候用语句
    insert into a select * from b where not exists(select 1 from a where a.主键=b.关联字段)
      

  2.   

    try this,BEGIN TRAN
      insert into a select distinct * from b
      if(@@error<>0) 
      BEGIN
          ROLLBACK TRAN
          RETURN
      END
      TRUNCATE TABLE b
      if(@@error<>0)
      BEGIN
          ROLLBACK TRAN
          RETURN
      END
    COMMIT TRAN
      

  3.   


    可以肯定,b表本身不会有重复数据,A表中有一个字段记录服务器的时间,从这个时间可以看出发生故障的时间点,重复的记录前后差几秒钟,也就是说在这几秒钟,服务器表不知道发生了什么故障,导致插入a表成功,清空B表失败,且事务没有回滚,再次执行时就出现了重复数据。此处用TRUNCATE TABLE 是不是不安全?