批量提交
update table1 set a=a+ b
from (select sum(b) b ,id from table2 group by id)   h
where table1.id=h.id
insert into table1(....)
from (select sum(b) b  ,id from table2 group by id) b left join table1 
on b.id=table1.id 
where table1.id is null

解决方案 »

  1.   

    这就不是数据库的问题了!效率底是在你提交的时候底!不知道你用什么?如果是delphi 或 bcb的话可以用dataset来更新最后post,如果是java那用批提交语句,反正你要避免循环提交
      

  2.   

    caiyunxia(monkey) :
    update段和insert段是在一起的吗?能智能识别修改还是添加吗?
      

  3.   

    pengdali(大力):
    我是用Delphi从XML数据文件中提出大量记录后对数据库进行修改或添加,你那儿有相关的例程吗?能否给我一份?
      

  4.   

    是一起
    UPDATE在前(修改存在的),INSERT INTO 在后(左连接,插入表中不存在的记录)
      

  5.   

    用一clientdataset连接sqlserver打开你的表
    这里循环读你的clientdataset中xml的记录
    如:
    while not clientdatasetXML.eof do
    beign
      clientdatasetSQL.append();
     clientdatasetSQL.fieldbyname('XX').values=clientdatasetXML.fieldbyname('XX').values;
      ...
      clientdatasetSQL.post();
      clientdatasetXML.next();
    end最后在这里clientdatasetSQL.applyupdate(0);
      

  6.   

    先插入到临时表,再用存储过程update tab
      set col1=tabtmp.col1,col2tabtmp.col2...
      from tabtmp
      where tab.keyfield=tabtmpyfieldinsert into tab(...)
    select * from tabtmp
    where not exists (
    select 1 from tab where 
    where tab.keyfield=tabtmpyfield

      

  7.   

    pengdali(大力) :
    非常感谢你的这段代码,但只是解决了添加记录,而我的问题是XML中的记录如果数据库中有就修改、没有则添加,关键字段是nID,再帮忙考虑一下!