博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server merge用法
阅读量:5038 次
发布时间:2019-06-12

本文共 1819 字,大约阅读时间需要 6 分钟。

有两个表名:source 表和 target 表,并且要根据 source 表中匹配的值更新 target 表。

有三种情况:

  • source 表有一些 target 表不存在的行。在这种情况下,需要将 source 表中的行插入到 target 中。
  • target 表有一些 source表不存在的行。这种情况下,需要从 target 表中删除行。
  • source 表的某些行具有与 target 表中的行相同的键。但是,这些行在非键列中具有不同的值。这种情况下,需要使用来自 source 表中的值更新 target 表中的行。

下图,说明了 source 表和 target 表 的一些操作:插入,更新,删除:

如果单独使用 INSERT, UPDATE和DELETE语句,则需要三个单独的语句,来使 source 表中的匹配行的数据更新到 target表。

但是,使用 merge 可以同时执行三个操作。下面是 merge语句的语法:

MERGE target_table USING source_tableON merge_conditionWHEN MATCHED    THEN update_statementWHEN NOT MATCHED    THEN insert_statementWHEN NOT MATCHED BY SOURCE    THEN DELETE;

使用示例:

CREATE TABLE sales.category (    category_id INT PRIMARY KEY,    category_name VARCHAR(255) NOT NULL,    amount DECIMAL(10 , 2 ));INSERT INTO sales.category(category_id, category_name, amount)VALUES(1,'Children Bicycles',15000),    (2,'Comfort Bicycles',25000),    (3,'Cruisers Bicycles',13000),    (4,'Cyclocross Bicycles',10000);CREATE TABLE sales.category_staging (    category_id INT PRIMARY KEY,    category_name VARCHAR(255) NOT NULL,    amount DECIMAL(10 , 2 ));INSERT INTO sales.category_staging(category_id, category_name, amount)VALUES(1,'Children Bicycles',15000),    (3,'Cruisers Bicycles',13000),    (4,'Cyclocross Bicycles',20000),    (5,'Electric Bikes',10000),    (6,'Mountain Bikes',10000);

要使用 sales.category_staging(源表)中的值将数据更新到 sales.category(目标表),要使用 merge:

MERGE sales.category t     USING sales.category_staging sON (s.category_id = t.category_id)WHEN MATCHED    THEN UPDATE SET         t.category_name = s.category_name,        t.amount = s.amountWHEN NOT MATCHED BY TARGET     THEN INSERT (category_id, category_name, amount)         VALUES (s.category_id, s.category_name, s.amount)WHEN NOT MATCHED BY SOURCE     THEN DELETE;

执行过程如下图:

 

转载于:https://www.cnblogs.com/Vincent-yuan/p/11521229.html

你可能感兴趣的文章
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
【ASP.NET开发】菜鸟时期的ADO.NET使用笔记
查看>>
android圆角View实现及不同版本号这间的兼容
查看>>
OA项目设计的能力③
查看>>
Cocos2d-x3.0 文件处理
查看>>
全面整理的C++面试题
查看>>