我使用的是CDatabase的execute,通过Insert语句进行写入操作,由于要进行上万条记录的插入(同一个表),而且每次插入前先要通过Select语句判断是否已经存在相同的记录(用CRecordset::Open,必须保证插入的数据无重复),因此整个操作执行的时间很长,不知道大家对此有什么好的优化方法?谢谢啦!

解决方案 »

  1.   

    先全部一次性插入,然后用一句SQL删除重复的,这样就省了一万次判断了。
      

  2.   

    先插入到一个临时表,再:select key,min(col1),...min(conN)
    into temptable2
    from temptable
    group by keyinsert tablename(...)
    select ... from temptable2
    where not exists (
    select * from tablename
    where tablename.key=temptable.key
    )drop table temptable2,temptable
      

  3.   

    我好象没有把问题说清楚。
    假设有表table,字段ID(int)(非自增),flag(int) ,Content(Varchar(20)),每次插入数据前先要用select ID from table where ID=x,如果存在,则判断Flag是否为1,如果为1,则update此条记录的falg和Content。如果不存在此条记录,则Insert此条记录。这就是我现在做的。我想问一下有没有效率更高的入库操作方法,否则对于1万条记录要执行2万条语句,速度很慢。