日期:2014-05-17  浏览次数:20834 次

临时表与实体表的操作(存在主键则更新,不存在则新增)
TbCard 表结构如下,CardCode和CardNum为主键。
 CardCode             varchar(10)          not null default '',
 CardNum              varchar(10)          not null default '',
 OtherInfo1           varchar(10)          not null default '',
 OtherInfo2            varchar(10)          not null default '',


同时,我建一个相同结构的临时表#Temp_TbCard

我要实现这样的功能,把临时表中的数据保存到TbCard中,如果临时表中的CardCode和CardNum在tbCard中存在,则更新 OtherInfo1和 OtherInfo2.

否则如果临时表中的CardCode和 CardNum在tbCard中不存在,则插入该行数据到TbCard。

------解决方案--------------------
这是merge函数的典型的用法
------解决方案--------------------
TbCard 表结构如下,CardCode和CardNum为主键。
一个表中不能同时存在两个主键的....
如果临时表中的CardCode和CardNum在tbCard中存在,可以通过pl/sql 中if控制语句来实现,进行 OtherInfo1和 OtherInfo2的更新。由于没有你的表,如果只能给你提供下个人的思路。如果需要后续的处理,把
表的结构发给我。我给你处理下。
------解决方案--------------------
这个语法应该绝大部分数据库都支持,你可以测一下,oracle有没有类似merge的写法就只有你自己去研究了
update?TbCard
set?OtherInfo1=t.CardCode?,OtherInfo2=t.CardNum
from?TbCard?inner?join?#Temp_TbCard?t?on?TbCard.CardCode=t.CardCode
and?TbCard.CardNum=t.CardNum
?
?
insert?into?TbCard
select?*
from?#Temp_TbCard?a
where?not?exists?(select?1?from?TbCard?b?where?a.CardCode=b.CardCode?and?a.CardNum=b.CardNum)

------解决方案--------------------
一个表中不能同时存在两个主键的...


+1