中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL的Merge關鍵字怎么使用

發布時間:2022-02-16 09:35:58 來源:億速云 閱讀:110 作者:iii 欄目:開發技術

這篇文章主要介紹“SQL的Merge關鍵字怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“SQL的Merge關鍵字怎么使用”文章能幫助大家解決問題。

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

SQL的Merge關鍵字怎么使用

MERGE的語法

MERGE INTO target_table

USING source_table

ON condition

WHEN MATCHED THEN

operation

WHEN NOT MATCHED THEN

operation;

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

MERGE的用法

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

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

若數據是源表有目標表沒有,則進行插入操作;

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

當源表和目標表匹配時:

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

MERGE的使用場景

數據同步

數據轉換

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

我們常用的是第三種場景

MERGE使用限制

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

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

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

MERGE示例

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

SQL的Merge關鍵字怎么使用
SQL的Merge關鍵字怎么使用

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

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

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

我們看一下Orders表里的結果:

SQL的Merge關鍵字怎么使用

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

OUTPUT子句

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

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

執行上述語句結果如下:

SQL的Merge關鍵字怎么使用

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

關于“SQL的Merge關鍵字怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民县| 修武县| 天峨县| 马尔康县| 徐闻县| 清河县| 峨山| 济宁市| 涪陵区| 南和县| 宾阳县| 方正县| 乐业县| 区。| 安国市| 都昌县| 万盛区| 贡山| 凌海市| 普陀区| 莱芜市| 河南省| 鄂州市| 齐河县| 辉县市| 广昌县| 如东县| 洪洞县| 泽库县| 小金县| 汝阳县| 嵊泗县| 集贤县| 和田县| 内江市| 亳州市| 左云县| 南岸区| 滦平县| 绵阳市| 房产|