SQL ServerSQL强大的最主要字Merge

介绍

Merge关键字是一个神奇的DML关键字。它在SQL Server
2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的演讲卓殊的短小精悍:”依据与源表联接的结果,对目的表执行插入、更新或删除操作。例如,依照在另一个表中找到的异样在一个表中插入、更新或删除行,可以对四个表展开同步。”,通过这几个描述,大家得以寓目Merge是有关对于多少个表之间的数目进行操作的。可以设想出,要求利用Merge的气象比如:

  • 数据同步
  • 数码转换
  • 据悉源表对目的表做Insert,Update,Delete操作

语法

merge [into] [目标表]
using <源表>
on 条件
when matched 操作 
when not matched 操作;

举个例子

确立连个表t1,t2。

CREATE TABLE t1 (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    department VARCHAR(20),
    grade INT DEFAULT 0
);
CREATE TABLE t2 (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    department VARCHAR(20),
    grade INT DEFAULT 0
);

安顿测试数据

INSERT  INTO dbo.t1
    ( id, name, department, grade )
    VALUES  ( 1, 'aaaa', 'd1', 60 ),
    ( 2, 'bbbb', 'd2', 70 ),
    ( 3, 'cccc', 'd2', 70 ),
    ( 4, 'dddd', 'd2', 70 ),
    ( 5, 'eeee', 'd2', 75 ),
    ( 6, 'ffff', 'd2', 70 ),
    ( 7, 'gggg', 'd2', 80 );
INSERT  INTO dbo.t2
    ( id, name, department, grade )
VALUES  ( 1, 'aaaa', 'd1', 60 ),
    ( 2, 'bbbb', 'd2', 70 ),
    ( 3, 'cccc', 'd3', 74 ),
    ( 4, 'dddd', 'd4', 77 ),
    ( 5, 'eeee', 'd5', 75 ),
    ( 6, 'ffff', 'd6', 70 ),
    ( 7, 'gggg', 'd7', 88 ),
    ( 8, 'hhhh', 'd8', 70 ),
    ( 9, 'iiii', 'd7', 70 ),
    ( 10, 'jjjj', 'd9', 70 ),
    ( 11, 'kkkk', 'd9', 70 );

开首数据

用merge语句将t2表的数目更新到t1表,即使t1表里存在t2表有name字段相等的数额(当然匹配原则可以有多少个),就用t2表的department字段值更新t1表的department值,即便t2表的name字段值在t1表里不存在就在t1表里插入新的行。

MERGE INTO dbo.t1
USING dbo.t2
ON dbo.t1.name = t2.name --匹配字段
WHEN MATCHED THEN UPDATE SET t1.department = t2.department --匹配有就更新
WHEN NOT MATCHED THEN INSERT VALUES(id,name,department,grade); --匹配没有就插入

更新后的t1表

SQL Server,本来要是看不出都对t1表做了什么样操作,仍可以借助OUTPUT关键字来查看变化,例如修改语句如下

MERGE INTO dbo.t1
USING dbo.t2
ON dbo.t1.name = t2.name
WHEN MATCHED THEN UPDATE SET t1.department = t2.department
WHEN NOT MATCHED THEN INSERT VALUES(id,name,department,grade)
OUTPUT --显示操作变化
$action AS 操作类型,
Inserted.id AS 插入id,
Inserted.name AS 插入name,
Inserted.department AS 插入department,
Inserted.grade AS 插入grade;

施行结果如图

查看操作变化

相关文章