首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-10-21 
临时表与实体表的操作(存在主键则更新,不存在则新增)TbCard 表结构如下,CardCode和CardNum为主键。 CardCod

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

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

热点排行