临时表与实体表的操作(存在主键则更新,不存在则新增)
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