SQL利用merge同步数据库之间表的数据
SQL利⽤merge同步数据库之间表的数据
同步两个数据库之间两表的数据也许的数据库管理员偶尔需要做的⼀件事情,下⾯来记录⼀下常⽤的两种⽅法:
⽅法⼀:使⽤delete、truncate
⽅法⼆:使⽤ merge into  ,Merge是在SQL Server  2008被引⼊,它能将Insert,Update,Delete简单的并为⼀句。根据与源表联接的结果,对⽬标表执⾏插⼊、更新或删除操作。例如,根据在另⼀个表中到的差异在⼀个表中插⼊、更新或删除⾏,可以对两个表进⾏同步。通过这个描述,我们 可以看出Merge是关于对于两个表之间的数据进⾏操作的。
可以想象出,需要使⽤Merge的场景⽐如:
数据同步
数据转换
基于源表对⽬标表做Insert,Update,Delete操作肉粽子的做法
下⾯是我把公司正式库⾥的产品信息表同步到测试库⾥⾯的两种⽅法:
⽅法⼀:
1)Truncate  F_test..biitm01t  清空表数据厨房家电品牌
2)insert  F_Test..biitm01t  select  *    from  F_Formal..biitm01t  把正式库的产品信息插⼊到test库⾥⾯。
⽅法⼆:⾸先获取到产品信息表的相关所有列
SELECT
表名=case  when  a.colorder=1  then  d.name  else  ''  end,
字段名=a.name
FROM  syscolumns  a
left  join  systypes  b  on  a.xusertype=b.xusertype银行预留手机号码怎么改
inner  join  sysobjects  d  on  a.id=d.id    and  d.xtype='U'  and    d.name<>'dtproperties'
left  join  syscomments  e  on  a.cdefault=e.id
left  join  ded_properties  g  on  a.id=g.major_id  and  a.colid=g.minor_id
left  join  ded_properties  f  on  d.id=f.major_id  and  f.minor_id=0
where  d.name='biitm01t'
order  by  a.lorder
你也可以直接  select * from 表  然后⼀个列⼀个列记录下(会很累),通过以上⽅法直接复制所有字段名,⽅便以下运⽤。
得出相关表的所有列名后,下⾯就是运⽤到merge into ⾥⾯去了。快速运⽤表字段进⾏粘贴到merge ⾥⾯的⽅法是:将所有字段复制粘贴
到excel⾥⾯,然后⽤EXCEL & 符号合并增加字符号,如图 ,直接复制excel⾥⾯值粘贴进去,就不⽤⼀个⼀个输了。
merge into F_test..biitm01t as t
using F_Formal..biitm01t as s
on t.itemcd=s.itemcd
when matched    --------------------当上⾯on 条件相同时,⽬标表(F_Formal..biitm01t)的数据被更新
then update set
t.itemcd=s.itemcd,
t.itemnm=s.itemnm,
t.itemnm2=s.itemnm2,
t.itemkind=s.itemkind,
t.pogbn=s.pogbn,
情侣网名幸福t.pjtcd=s.pjtcd
when not matched  ------------------⽬标表中没有的itemcd,在源表(F_Test)中有,则这些⾏插⼊到⽬标表
then insert values (
s.itemcd,
s.itemnm,
s.itemnm2,
s.itemkind,
s.pogbn,陕西苹果
公务员考试 申论s.pjtcd
)
when not matched by source ------⽬标表存在⽽源表不存在的数据⾏,则删除⽬标表中的这些⾏
then delete;
运⾏以上代码成功后,F_Test 库⾥⾯的biitm01t 表就跟正式库⾥⾯ 的biitm01t 表的数据⼀样了。
备注:上⾯的Merge关键字后⾯使⽤了多个WHEN…THEN语句,⽽这个语句是可选的.也可以仅仅新
增或是仅仅删除,当然第⼀种⽅法⽐较简便,但如果当时的数据被⼈使⽤的情况下,使⽤delete 的⽅法会给⽤户带来不便,根据实际情况⽽定。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。