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

怎么将B表的内容复制到A表,不存在的插入,存在的更新

2012-02-12 
如何将B表的内容复制到A表,不存在的插入,存在的更新A表IDYearValueAAA2005100BBB2006200CCC2006500B表(临

如何将B表的内容复制到A表,不存在的插入,存在的更新
A表
ID       Year     Value  
AAA         2005     100
BBB         2006     200
CCC         2006     500

B表(临时表)
ID       Year     Value  
CCC         2006     1000
DDD         2007     800

ID   和Year是主键

更新后A表
A表
ID       Year     Value  
AAA         2005     100
BBB         2006     200
CCC         2006     1000
DDD         2007     800


用语句怎么实现效率高呢?
我现在想的是先Update一次,再insert一次

[解决办法]

update A set A.[Year]=B.[Year], A.Value=B.Value
from A, B
where A.ID=B.ID

insert A
select * from B as tmp
where not exists(select 1 from A where ID=tmp.ID)
[解决办法]

create table A(ID varchar(10), [Year] int, Value int)
insert A select 'AAA ', 2005, 100
union all select 'BBB ', 2006, 200
union all select 'CCC ', 2006, 500
go
create table B(ID varchar(10), [Year] int, Value int)
insert B select 'CCC ', 2006, 1000
union all select 'DDD ', 2007, 800
go

update A set A.[Year]=B.[Year], A.Value=B.Value
from A, B
where A.ID=B.ID
go

insert A
select * from B as tmp
where not exists(select 1 from A where ID=tmp.ID)
go

select * from A
--result
ID Year Value
---------- ----------- -----------
AAA 2005 100
BBB 2006 200
CCC 2006 1000
DDD 2007 800

(4 row(s) affected)

[解决办法]
update A set A.[Year]=B.[Year], A.Value=B.Value
from A inner join B on A.ID=B.ID

insert into A(ID,[Year],[Value])
select ID,[Year],[Value]
from B
where checksum(*) not in (select checksum(*) from A)

热点排行