国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQLServer中merge函數用法詳解

2020-07-25 12:48:39
字體:
來源:轉載
供稿:網友

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

MERGE 目標表

USING 源表

ON 匹配條件

WHEN MATCHED THEN

語句

WHEN NOT MATCHED THEN

語句;

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

WHEN NOT MATCHED BY TARGET

表示目標表不匹配,BY TARGET是默認的,所以上面我們直接使用WHEN NOT MATCHED THEN

WHEN NOT MATCHED BY SOURCE

表示源表不匹配,即目標表中存在,源表中不存在的情況。

主要用法:

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

當源表和目標表不匹配時:若數據是源表有目標表沒有,則進行插入操作若數據是源表沒有而目標表有,則進行更新或者刪除數據操作當源表和目標表匹配時:進行更新操作或者刪除操作when matched 這個子句可以有兩個,當有兩個時,第一個子句必須是when matched and condition且兩個matched子句只會執行一個,且兩個子句必須是一個update和一個delete操作when not matched by source和上面類似

merge icr_codemap_bak as a
using icr_codemap as b
on a.COLNAME = b.COLNAME and a.ctcode = b.ctcode
when matched and b.pbcode <> a.pbcode
then update set a.pbcode = b.pbcode
when not matched
then insert values(b.colname,b.ctcode,b.pbcode,b.note)
;

可以比對字段不一致進行更新

https://technet.microsoft.com/zh-cn/library/bb510625.aspx  這個是MSDN的網址

在 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 語句最后必須包含分號,以 ; 結束。

ps:SQL Server中Merge-using的用法

在執行之前:

merge into UserInfo uusing chartinfo c on u.UserId=c.UserIdwhen matched and u.UserName=c.UserName then update set u.lastUpdate=c.LastUpdatewhen not matched --為not matched時 不能為update(沒有匹配成功 當然不能update了) then insert (UserName,Sex)values('ZhangZhao','b');

執行之后

Merge和using搭配用于特別是BI上數據統計和分析上 比如 要求子表中沒有的數據那么父表中就要刪除對應的數據 保證子表和父表的數據對應 如果按照常規的做法是 跑個作業 然后通過游標/表值函數/臨時表等等循環的獲取數據然后更新父表  這樣是很浪費效率的  這時Merge派上用場了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静安区| 抚州市| 镇巴县| 庆阳市| 阳城县| 郯城县| 晋州市| 祁阳县| 石泉县| 同仁县| 伊宁县| 开阳县| 翁牛特旗| 确山县| 宝山区| 彭阳县| 洛阳市| 鹤峰县| 鸡西市| 昌宁县| 晋城| 光山县| 离岛区| 新津县| 昌都县| 漳浦县| 靖江市| 湖州市| 抚宁县| 柏乡县| 横山县| 彩票| 增城市| 临颍县| 永安市| 新安县| 神农架林区| 潼南县| 尉犁县| 张家川| 新宾|