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

临时表与实体表的操作(存在主键则更新,不存在则新增)

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。

------解决方案--------------------
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)
 
------解决方案--------------------
如果是SQL SERVER 2008或者之上的版本可以用merge实现。
如果是之前版本可能要写两条语句,INNER JOIN的UPDATE, LEFT JOIN没有数据的INSERT
------解决方案--------------------
oracle 写法,参考:

http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html