在SQL2008中,新增了一個關鍵字:Merge,這個和Oracle的Merge的用法差不多,只是新增了一個delete方法而已。下面就是具體的使用說明:
首先是對merge的使用說明:
merge
[
into
]
[
目標表
]
using < 源表 >
on 條件 --這個條件一般指對目標表的限制,如果想對原表限制,請<源表>中使用子查詢和條件
when matched 操作
when not matched 操作;
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);
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);
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