SQL 利用merge 同步数据库之间表的数据
同步兩個數(shù)據(jù)庫之間兩表的數(shù)據(jù)也許的數(shù)據(jù)庫管理員偶爾需要做的一件事情,下面來記錄一下常用的兩種方法:
方法一:使用delete、truncate
方法二:使用 merge into??,Merge是在SQL Server? 2008被引入,它能將Insert,Update,Delete簡單的并為一句。根據(jù)與源表聯(lián)接的結果,對目標表執(zhí)行插入、更新或刪除操作。例如,根據(jù)在另一個表中找到的差異在一個表中插入、更新或刪除行,可以對兩個表進行同步。通過這個描述,我們 可以看出Merge是關于對于兩個表之間的數(shù)據(jù)進行操作的。
可以想象出,需要使用Merge的場景比如:
數(shù)據(jù)同步
數(shù)據(jù)轉換
基于源表對目標表做Insert,Update,Delete操作
下面是我把公司正式庫里的產(chǎn)品信息表同步到測試庫里面的兩種方法:
方法一:
1)Truncate? F_test..biitm01t??清空表數(shù)據(jù)
2)insert? F_Test..biitm01t ?select?? *?? ?from?? F_Formal..biitm01t?? 把正式庫的產(chǎn)品信息插入到test庫里面。
?
方法二:首先獲取到產(chǎn)品信息表的相關所有列
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?? sys.extended_properties?? g?? on?? a.id=g.major_id?? and?? a.colid=g.minor_id
left?? join?? sys.extended_properties?? f?? on?? d.id=f.major_id?? and?? f.minor_id=0
where?? d.name=’biitm01t’
order?? by?? a.id,a.colorder
你也可以直接? 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)的數(shù)據(jù)被更新
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 ——目標表存在而源表不存在的數(shù)據(jù)行,則刪除目標表中的這些行
then delete;
運行以上代碼成功后,F_Test 庫里面的biitm01t 表就跟正式庫里面 的biitm01t 表的數(shù)據(jù)一樣了。
備注:上面的Merge關鍵字后面使用了多個WHEN…THEN語句,而這個語句是可選的.也可以僅僅新增或是僅僅刪除,當然第一種方法比較簡便,但如果當時的數(shù)據(jù)被人使用的情況下,使用delete 的方法會給用戶帶來不便,根據(jù)實際情況而定。
轉載于:https://www.cnblogs.com/syncnavigator/p/10193522.html
總結
以上是生活随笔為你收集整理的SQL 利用merge 同步数据库之间表的数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “孰云二千石”下一句是什么
- 下一篇: Python——Entry、Text控件