日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

SQL 利用merge 同步数据库之间表的数据

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?? 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 的方法會給用戶帶來不便,根據實際情況而定。

轉載于:https://www.cnblogs.com/syncnavigator/p/10193522.html

總結

以上是生活随笔為你收集整理的SQL 利用merge 同步数据库之间表的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。