日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解SQLMerge關(guān)鍵字

Merge關(guān)鍵字是一個神奇的DML關(guān)鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Delete簡單的并為一句。MSDN對于Merge的解釋非常的短小精悍:”根據(jù)與源表聯(lián)接的結(jié)果,對目標表執(zhí)行插入、更新或刪除操作。

沾化ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

MERGE的語法

MERGE INTO target_table

USING source_table

ON condition

WHEN MATCHED THEN

operation

WHEN NOT MATCHED THEN

operation;

注意:其中最后語句分號不可以省略,且源表既可以是一個表也可以是一個子查詢語句。

MERGE的用法

merge無法多次更新同一行,也無法更新和刪除同一行

當源表和目標表不匹配時:

若數(shù)據(jù)是源表有目標表沒有,則進行插入操作;

若數(shù)據(jù)是源表沒有而目標表有,則進行更新或者刪除數(shù)據(jù)操作

當源表和目標表匹配時:

進行更新操作或者刪除操作

MERGE的使用場景

數(shù)據(jù)同步

數(shù)據(jù)轉(zhuǎn)換

基于源表對目標表做INSERT,UPDATE,DELETE操作

我們常用的是第三種場景

MERGE使用限制

在 MERGE MATCHED 操作中,只能允許執(zhí)行 UPDATE 或者 DELETE 語句。

在 MERGE NOT MATCHED 操作中,只允許執(zhí)行 INSERT 語句。

一個 MERGE語句中出現(xiàn)的MATCHED操作,只能出現(xiàn)一次 UPDATE 或者 DELETE 語句,否則就會出現(xiàn)下面的錯誤: An action of type ‘WHEN MATCHED’ cannot appear more than once in a ‘UPDATE’ clause of a MERGE statement.

MERGE示例

下面我們通過一個示例來介紹一下該如何使用MERGE,我們以Customers表和Orders表為例。數(shù)據(jù)如下:

SQL中Merge的用法SQL中Merge的用法
SQL中Merge的用法SQL中Merge的用法

Q:當Customers表里的客戶有購買商品,我們就更新一下他們的下單時間,將他們的下單時間往后推遲一小時,如果客戶沒有購買商品,那么我們就將這些客戶的信息插入到訂單表里。

根據(jù)上面的要求我們可以這樣寫SQL:

MERGE INTO Orders O
--確定目標表Orders
USING Customers C ON C.客戶ID=O.客戶ID  
--從源表Customers確定關(guān)聯(lián)條件 C.客戶ID=O.客戶ID
WHEN MATCHED  
--當匹配時對目標表的訂單日期執(zhí)行更新操作
THEN UPDATE SET O.訂單日期=DATEADD(HOUR,1,O.訂單日期)
WHEN NOT MATCHED BY TARGET
--當不匹配時對目標表進行插入操作
THEN INSERT (客戶ID,員工ID,訂單日期,發(fā)貨ID)
VALUES (C.客戶ID,NULL,NULL,NULL)

我們看一下Orders表里的結(jié)果:

SQL中Merge的用法SQL中Merge的用法

我們發(fā)現(xiàn)與Customers表里匹配上的訂單日期被修改了,訂單日期往后推遲了一小時,而沒有匹配上的在訂單表尾部增加了幾行記錄。這就是MERGE的實際應(yīng)用了。

OUTPUT子句

MERGE還能與OUTPUT一起使用,可以將剛剛做過變動的數(shù)據(jù)進行輸出,我們以上面的示例為基礎(chǔ),進行示范。

MERGE INTO Orders O
--確定目標表Orders
USING Customers C ON C.客戶ID=O.客戶ID
--從源表Customers確定關(guān)聯(lián)條件 C.客戶ID=O.客戶ID
WHEN MATCHED  
--當匹配時對目標表的訂單日期執(zhí)行更新操作
THEN UPDATE SET O.訂單日期=DATEADD(HOUR,1,O.訂單日期)
WHEN NOT MATCHED BY TARGET
--當不匹配時對目標表進行插入操作
THEN INSERT (客戶ID,員工ID,訂單日期,發(fā)貨ID)
VALUES (C.客戶ID,NULL,NULL,NULL)
OUTPUT $action AS [ACTION],Inserted.訂單日期 ,
Inserted.客戶ID,Inserted.發(fā)貨ID,Inserted.員工ID
--用OUTPUT輸出剛剛變動過的數(shù)據(jù)

執(zhí)行上述語句結(jié)果如下:

SQL中Merge的用法SQL中Merge的用法

從上圖我們看到,執(zhí)行的動作都是更新,這里的動作只有UPDATE和DELETE,插入也屬于更新,此外我們看到訂單日期又往后推遲了一小時,是因為我們又一次執(zhí)行了往后增加一小時的更新操作,其他的字段沒變。

總結(jié)

MERGE功能比較豐富,以上我們只是簡單介紹了一些常用功能,還有其他一些用法,有興趣的可以搜索一下并動手嘗試。在我們要對表做多種操作時,這種寫法不僅可以節(jié)省代碼,而且有時候還可以提高執(zhí)行效率。


網(wǎng)頁名稱:詳解SQLMerge關(guān)鍵字
網(wǎng)站地址:http://www.dlmjj.cn/article/dpeppgd.html