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,