SQL2008中Merge的用法


在SQL2008中,新增了一個關鍵字:Merge,這個和Oracle的Merge的用法差不多,只是新增了一個delete方法而已。下面就是具體的使用說明:

首先是對merge的使用說明:

merge [ into ] [ 目標表 ]
using
< 源表 >
on 條件  --這個條件一般指對目標表的限制,如果想對原表限制,請<源表>中使用子查詢和條件
when matched 操作
when not matched 操作;

首先,請參看兩張表 TableThis和TableThat:

可以看到,這兩張表中的內容還是比較簡單的,兩張表通過一個tbThisID進行主鍵和外鍵的關聯,那么如如果想實現二者之間的數據同步,該如何進行呢,請看具體的Merge代碼:

復制代碼
merge into TableThat as a
using TableThis
as b
on a.tbThisID = b.tbThisID
when matched then
update set a.tbContent = a.tbContent + ' - ' + b.tbThisPhone
when not matched then
insert (tbThisID,tbContent)
values (b.tbThisID,b.tbThisPhone);
復制代碼

 這樣  就可以將兩個表中間的數據進行同步並且進行更新,確實很方便,最終得到結果為:

但是如果想讓匹配的數據刪除掉,並且如果子表中沒有數據就插入,這個該如何用呢,當然得涉及到delete的操作了:

復制代碼
merge into TableThat as a
using TableThis
as b
on a.tbThisID = b.tbThisID
when matched then
delete
when not matched then
insert (tbThisID,tbContent)
values (b.tbThisID,b.tbThisPhone);
復制代碼

這樣得到的結果為:

希望有用。

另外,如果想對源表進行篩選,也是可以的,在原表處使用括號和子查詢,例如:

merge into TableThat as a 
using (select * from TableThis where tbThisID=5) as b
on a.tbThisID = b.tbThisID
when matched then
delete
whennot matched then 
insert (tbThisID,tbContent)
values(b.tbThisID,b.tbThisPhone);

這樣就可以先從源頭控制了。

 

出處:https://www.cnblogs.com/scy251147/archive/2011/05/30/2063672.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM