SQLServer之merge函数用法

MERGE 目标表
USING 源表
ON 匹配条件
WHEN MATCHED THEN
语句
WHEN NOT MATCHED THEN
语句;app

其中最后语句分号不能够省略,且源表既能够是一个表也能够是一个子查询语句code

WHEN NOT MATCHED BY TARGET
表示目标表不匹配,BY TARGET是默认的,因此上面咱们直接使用WHEN NOT MATCHED THEN
WHEN NOT MATCHED BY SOURCE
表示源表不匹配,即目标表中存在,源表中不存在的状况。it

主要用法:
merge没法屡次更新同一行,也没法更新和删除同一行
当源表和目标表不匹配时:
若数据是源表有目标表没有,则进行插入操做
若数据是源表没有而目标表有,则进行更新或者删除数据操做
当源表和目标表匹配时:
进行更新操做或者删除操做io

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的网址date


在 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 语句最后必须包含分号,以 ; 结束。map

相关文章
相关标签/搜索