把数据库中对应表的主键读取出来进行对比,如果数据库表中存在此主键,就放弃该条记录,否则保留,最后批量导入数据库中
你可以考虑使用ODP.NET的Array Binding模式。
给个思路:
1.把datatable中的数据塞入到数据库的临时表中
2.在db中用临时表和需要对比的表做对比.
INSERT INTO B
SELECT A. * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.*=B.*)
用事务进行批数据插入,插入时如果你要插入的数据的主键值有就可以了,如果数据库中有这些数据就不会插入成功,如果插入不成功事务会自动回滚,对于客户来说就相当于放弃了插入。
或者有架构上有什么方式避免这个超时,可是在SQL编写方面看来,查询出来结果越少越好,比较次数越少越好。
所以应该是在查询那1W条数据的时候便把数据相同数据排除掉,而不是全部取出再判断。
如有4k条相同的,那么就只取出6k条数据,效率快了。
不知能否解决这个问题,先试试吧。