【原创】SQL SERVER中的不同表结构的同步(插入/更新)

   最近有个项目需要用Windows Service来提取几个数据库中的数据来插入另一个数据库以供另一套平台使用。

   在这个WinService中接收DataTable,DataTable是由另外几个库提供的有需数据字段数据集。

   需求:第一次数据,完全插入。以后每次抽取这几个库的数据都需要判断,如果数据已经存在就更新,不在则插入。

   第一次把这个判断放在了程序中。但是每条都需要判断是否已经存在,然后再更新或插入。初步测试8万条数据,那是相当的慢。

   现在把这个过程放到数据库端去运行:

   SQL 操作语句如下例:

   

ContractedBlock.gifExpandedBlockStart.gifCode
create table Temp1
(
  ID 
int,
  
[NAME] varchar(10)
)
create table Temp2
(
  ID 
int,
  
[NAME] varchar(10)
)

drop table Temp1,Temp2

insert into Temp1 values(1,'job')
insert into Temp1 values(2,'mark')
insert into Temp1 values(3,'john')
insert into Temp1 values(4,'joy')
insert into Temp1 values(5,'may')

insert into Temp2 values(1,'bob')
insert into Temp2 values(2,'mark')
insert into Temp2 values(3,'summer')
insert into Temp2 values(7,'spring')
insert into Temp2 values(8,'jay')

select * from Temp1
select * from Temp2

update Temp1
set NAME = b.NAME
from 
    Temp1 a
join
    Temp2 b 
on a.ID=b.ID

insert into Temp1
select a.ID,a.NAME from Temp2 as a 
left join Temp1 as b on a.NAME = b.NAME
where b.NAME is null
现在还有另一种解决方案,下次会把效率对比和详细方法补齐。

 

 

转载于:https://www.cnblogs.com/compass/articles/1419341.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值