解决方法是A表中设置一个主键 然后插入的时候用语句 insert into a select * from b where not exists(select 1 from a where a.主键=b.关联字段)
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
insert into a select * from b where not exists(select 1 from a where a.主键=b.关联字段)
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
可以肯定,b表本身不会有重复数据,A表中有一个字段记录服务器的时间,从这个时间可以看出发生故障的时间点,重复的记录前后差几秒钟,也就是说在这几秒钟,服务器表不知道发生了什么故障,导致插入a表成功,清空B表失败,且事务没有回滚,再次执行时就出现了重复数据。此处用TRUNCATE TABLE 是不是不安全?