MERGE 语句是首先对源表和目标表都进行完全表扫描,然后拿源表和目标表检查,匹配条件,若成立则执行SQL语句1,不成立则执行SQL语句2,最执行SQL语句3。
MERGE
[ TOP ( expression ) [ PERCENT ] ]
[ INTO ] <操作表> --即将做插入、更新、删除的表
USING <源表或者数据集或者子查询> --用户提供匹配条件来源的集合或者表
ON <匹配条件> --可以是任意有效的条件组合
[ WHEN MATCHED [ AND <clause_search_condition> ]--匹配条件成立
THEN <SQL语句1> ]
[ WHEN NOT MATCHED [ BY TARGET ] [ AND <clause_search_condition> ]--匹配条件不成立
THEN <SQL语句2> ]
[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]--目标变不存在而源表存在的数据
THEN <SQL语句3> ]
;--不要忘记分号
具体详解:
SQL Server merge用法 - lybingyu - 博客园
SQL
Server
高级开发(
Merge
Into
的使用)
我们先创建一张临时表 #TempTable包含三列:学生姓名,科目名称和成绩,建表语句如下:
Create Table #TempTable
StudentName nvarchar(20) Not Null,
SubjectName nvarchar(20) Not Null,
Score int null
其中学生姓名和科目名称是不能重复的,那么我们在插入数据时就会先检测数据是否存在,不存在就写入,存在就更新
从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用
MERGE
INTO
代替 UPDATE 执行批量更新,会提升执行效率。
MERGE
INTO
语法
如下:
MERGE
INTO
table_name alias1
USING (table|view|sub_query) alias2
ON (join conditio...
从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用
MERGE
INTO
代替 UPDATE 执行批量更新,会提升执行效率。
MERGE
INTO
语法
如下:
多表关联查询的时候会用到临时表插入数据,然后再用select查行查询,在往临时表里插入数据的时候,我们经常会用到判断如果临时表里有了这部分数据我们就要更新数据,如果临时表里没有这部分数据我们就要插入,这个时候可以怎么去实现呢?
下面介绍各类型数据库实现的大致方式。
一、存储过程实现
各类型数据库都可以通过存储过程实现,因为是共性问题,所以就放前面了,这里以my
sql
数据库的存储过程为例。
1、环境准备
create table t1(
id bigint(10),
name varcha
随后贴出来的
merge
into
代码,它会在插入时做检测,若表中已存在数据,会用新数据做更新,若表中不存在数据,会把新数据插入表中。
merge
into
[Test].[dbo].[
merge
_target] as t #
merge
into
后的表被当做目标表
using [T...