MERGE的定义

MERGE关键字是一个神奇的DML关键字,它能将INSERT,UPDATE,DELETE等操作并为一句,根据与源表联接的结果,对目标表执行插入、更新或删除操作。

MERGE的语法

MERGE INTO target_table
USING source_table
ON condition
WHEN MATCHED THEN 
operation
WHEN NOT MATCHED THEN 
operation;

注意:其中最后语句分号不可以省略,且源表既可以是一个表也可以是一个子查询语句。

merge无法多次更新同一行,也无法更新和删除同一行

当源表和目标表不匹配时:

  • 若数据是源表有目标表没有,则进行插入操作;
  • 若数据是源表没有而目标表有,则进行更新或者删除数据操作

当源表和目标表匹配时:

  • 进行更新操作或者删除操作

需要注意的报错:

MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,以确保目标行最多与一个源行匹配,也可以使用GROUP BY字句对源行分组

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 语句 In this article, we will review SQL Server MERGE statement, alternatives to MERGE statement, different clauses and examples of MERGE statement in SQL Server . 在本文中,我们将介绍 SQL Server MERGE 语句 ,...
说明:通过 MERGE 命令,可以将 多个 DML动作 语句 (INSERT、UPDATE、DELETE)组合成一个整体动作,从而提高性能(它们可共享许多相同的物理操作)和简化事务。 (1)、示例 USE AdventureWorks2008 CREATE TABLE Sales.MonthlyRollup Year smallint NOT NULL, Month tinyint NOT NU
MERGE 语句 是首先对源表和 目标 表都进 完全表扫描,然后拿源表和 目标 表检查, 匹配 条件,若成立则执 SQL 语句 1,不成立则执 SQL 语句 2,最执 SQL 语句 3。 MERGE [ TOP ( expression ) [ PERCENT ] ] [ INTO ] <操作表> --即将做插入、 更新 删除 的表 USING <源表或者数据集或者子查询> --用户提供 匹配 条件来源的集合或者表 ON < 匹配 条件> --可... 多表关联查询的时候会用到临时表插入数据,然后再用select查 查询,在往临时表里插入数据的时候,我们经常会用到判断如果临时表里有了这部分数据我们就要 更新 数据,如果临时表里没有这部分数据我们就要插入,这个时候可以怎么去实现呢? 下面介绍各类型 数据库 实现的大致方式。 一、存储过程实现 各类型 数据库 都可以通过存储过程实现,因为是共性问题,所以就放前面了,这里以my sql 数据库 的存储过程为例。 1、环境准备 create table t1( id bigint(10), name varcha
-- SQL Server MERGE INTO TEST_IN_COPY3 a USING ( SELECT '武汉-北京998' AS NAME, '2017 - 11 - 21 11 : 53 : 49.0000000 + 00 : 00' AS datetimeoffseta, '2017-11-10 11:52:20' AS datetim2e, 998 AS ID,