SQL 利用merge 同步資料庫之間表的資料

2021-10-07 17:31:10 字數 2235 閱讀 3395

同步兩個資料庫之間兩表的資料也許的資料庫管理員偶爾需要做的一件事情,下面來記錄一下常用的兩種方法:

方法一:使用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   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)的資料被更新

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 的方法會給使用者帶來不便,根據實際情況而定。

SQL 利用merge 同步資料庫之間表的資料

同步兩個資料庫之間兩表的資料也許的資料庫管理員偶爾需要做的一件事情,下面來記錄一下常用的兩種方法 方法一 使用delete truncate 方法二 使用 merge into merge是在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。根據與源...

SQL 利用merge 同步資料庫之間表的資料

同步兩個資料庫之間兩表的資料也許的資料庫管理員偶爾需要做的一件事情,下面來記錄一下常用的兩種方法 方法一 使用delete truncate 方法二 使用 merge into merge是在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。根據與源...

SQL 資料庫 同步(二)

二 受到老同事資料庫同步軟體的啟發,我製作了乙個基於觸發器的同步。基本風格和老同事的一樣,我們還是先來看介面 繼續沿用了前人的智慧型。第一次介面跳轉時,需要的時間比較長。後台工作比較多 剛剛幾個圖形不好擷取,就是工具裡面的,包括 表比較,完整備份,差異備份和增量備份。這個資料庫同步實現的原理是 在主...