Home  >  Article  >  Database  >  SQLServer之merge函数用法_MySQL

SQLServer之merge函数用法_MySQL

PHP中文网
PHP中文网Original
2016-05-27 19:11:412021browse

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

以上就是SQLServer之merge函数用法_MySQL的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn