方法进行批量更新和插入

时间:2011-03-11 20:13:31

标签: sql batch-file

我正在寻找一些针对此问题需要考虑的提示和事项。 我从Web服务调用中获得了数千条记录。 相关数据项是id,startDate,termDate,name和其他一些字段。 有一个db填充了一些记录。 唯一性是id + startDate + termDate,请注意可能有许多相同的id,具有不同的startDate和/或termDate。

对于来自Web服务调用的记录,我需要找到与唯一约束匹配的记录,对于这些记录,请进行更新。 对于来自不在db(id + startDate + termDate)中的Web服务的记录,我需要插入记录。

该应用程序目前使用iBatis。 我需要一个方向来做一个好的方法来做“记录存在”存在例程,以及如何跟踪需要用于更新的插件的Web服务记录。

然后,一旦我有这两组reocrds,我想知道什么是做db工作的最佳方法。 是否最好一次迭代一次记录并完成工作(插入或更新),或者更好的做法是进行一次大的更新或插入包含所有记录的字符串,所以实际上,我会有两个db调用,一个用于更新,一个用于插入(但sql会很大)?

1 个答案:

答案 0 :(得分:1)

将Web服务中的记录保存在文本文件中。然后将批量插入到空的临时表中。代码将根据rdbms而有所不同。

获得临时表后,执行insert:

insert into my_table (id, startDate, termDate, name)
select t.id, t.startDate, t.termDate, t.name
from temp_table t
left outer join my_table my on 
    t.id = my.id
    and
    t.startDate = my.startDate
    and
    t.termDate = my.termDate
where my.id is null

更新:

update my_table
set 
    id = t.id, 
    startDate = t.startDate, 
    termDate = t.termDate, 
    name = t.name
from temp_table t
inner join my_table my on 
    t.id = my.id
    and
    t.startDate = my.startDate
    and
    t.termDate = my.termDate
where 
    id = t.id
    and
    startDate = t.startDate
    and 
    termDate = t.termDate

上面未经测试的更新语法应该可以在postgresql中使用。如果你指定rdbms我可以改变它。