日期:2014-05-18  浏览次数:20486 次

存储过程中有个单独的Insert Into语句,一下插入很多记录。
大概一下insert into 200到500条记录,但是这些记录中 可能有部分 记录违反了 唯一索引 的规则。。从而产生错误。。。有办法设置一下,让SQL忽略产生错误的记录,并把正常记录插入么???

或者是事先判断一下有冲突的忽略??

------解决方案--------------------
可以,用distinct排除一下
------解决方案--------------------
也许帮得到你,先把这些记录放入一个临时表temp,然后向目标表target插入数据。比如索引列是a
SQL code

insert into target(a,b,c) select t1.a,t1.b,t1.c from temp t1 where not exist(select * from target t2 where t1.a=t2.a )

------解决方案--------------------
探讨
也许帮得到你,先把这些记录放入一个临时表temp,然后向目标表target插入数据。比如索引列是a

SQL code


insert into target(a,b,c) select t1.a,t1.b,t1.c from temp t1 where not exist(select * from target t2 where t1.a=t2.a )

------解决方案--------------------
可以创建一个trigger触发器,在插入数据时判断是否违反约束,若不违反插入数据,若违反则不插入。
------解决方案--------------------
我觉得触发器是比较好的办法~~
------解决方案--------------------
1、建议你还是要找出哪些列重复,因为这个是一个隐患。
2、可以用distinct或者group by去掉重复主键。
3、也可以像2楼说的先过滤掉。
4、不建议使用触发器,特别是大数据量的时候,每一行都要触发。效能上的花销可能你不可接受。
5、比较好的方法就是先导入一个临时表再处理。好像2012的insert语句有忽略重复值的。不过可能没那么快普及。