我正在寻找一些针对此问题需要考虑的提示和事项。 我从Web服务调用中获得了数千条记录。 相关数据项是id,startDate,termDate,name和其他一些字段。 有一个db填充了一些记录。 唯一性是id + startDate + termDate,请注意可能有许多相同的id,具有不同的startDate和/或termDate。
对于来自Web服务调用的记录,我需要找到与唯一约束匹配的记录,对于这些记录,请进行更新。 对于来自不在db(id + startDate + termDate)中的Web服务的记录,我需要插入记录。
该应用程序目前使用iBatis。 我需要一个方向来做一个好的方法来做“记录存在”存在例程,以及如何跟踪需要用于更新的插件的Web服务记录。
然后,一旦我有这两组reocrds,我想知道什么是做db工作的最佳方法。 是否最好一次迭代一次记录并完成工作(插入或更新),或者更好的做法是进行一次大的更新或插入包含所有记录的字符串,所以实际上,我会有两个db调用,一个用于更新,一个用于插入(但sql会很大)?
答案 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我可以改变它。