SQL Server MERGE

Merge关键字是一个神奇的DML关键字。它在SQL
Server
2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。

可以想象出,需要使用Merge的场景比如:

  • 数据同步

  • 数据转换

  • 基于源表对目标表做Insert,Update,Delete操作

对于大量数据的更新操作建议使用此方式进行

一下为简单的一个测试:

-- 源表
CREATE TABLE test_from (id INT, val VARCHAR(20));

-- 目标表
CREATE TABLE test_to (id INT, val VARCHAR(20));

-- 插入源表
INSERT INTO test_from VALUES (1, ‘A‘);
INSERT INTO test_from
VALUES (2, ‘B‘);

-- 合并 源表到目标表
MERGE test_to USING test_from
ON (
test_to.id = test_from.id )    -- 条件是 id 相同
WHEN MATCHED
THEN UPDATE SET test_to.val = test_from.val   -- 匹配的时候,更新
WHEN
NOT MATCHED THEN INSERT VALUES(test_from.id, test_from.val) --
源表有,目标表没有,插入
WHEN NOT MATCHED BY SOURCE THEN DELETE; --
目标表有,源表没有,目标表该数据删除.

-- 第一次检查 目标表数据.
SELECT * FROM test_to;

id          val
-----------
--------------------
          1
A
          2 B

-- 更新源表
UPDATE test_from SET val = ‘A2‘ WHERE id = 1;
-- 删除源表
DELETE
FROM test_from WHERE id = 2;
-- 插入源表
INSERT INTO test_from VALUES (3,
‘C‘);

-- 合并 源表到目标表
MERGE test_to USING test_from
ON ( test_to.id =
test_from.id )    -- 条件是 id 相同
WHEN MATCHED THEN UPDATE SET
test_to.val = test_from.val   -- 匹配的时候,更新
WHEN NOT MATCHED THEN
INSERT VALUES(test_from.id, test_from.val) -- 源表有,目标表没有,插入
WHEN NOT MATCHED
BY SOURCE THEN DELETE; -- 目标表有,源表没有,目标表该数据删除.

-- 再次检查 目标表数据.
SELECT * FROM test_to;

id          val
-----------
--------------------
          1
A2
          3 C

以上例子 在 SQL Server 2008 Express 下测试通过。

时间: 2024-10-16 19:11:49

SQL Server MERGE的相关文章

SQL Server Merge语句的使用

Merge关键字在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的. 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做Insert,Update,Del

sql server merge 的用法

CREATE TABLE tTable ( id INT , f1 VARCHAR(10) , f2 VARCHAR(10) , f3 VARCHAR(10) ) GO INSERT INTO tTable SELECT 11 ,12 , 13 , 14 INSERT INTO tTable SELECT 13 ,24 ,25,26 GO CREATE TABLE tTable2 ( id INT , f5 VARCHAR(10) , f6 VARCHAR(10) ) GO CREATE PRO

SQL Server merge用法

有两个表名:source 表和 target 表,并且要根据 source 表中匹配的值更新 target 表. 有三种情况: source 表有一些 target 表不存在的行.在这种情况下,需要将 source 表中的行插入到 target 中. target 表有一些 source表不存在的行.这种情况下,需要从 target 表中删除行. source 表的某些行具有与 target 表中的行相同的键.但是,这些行在非键列中具有不同的值.这种情况下,需要使用来自 source 表中的值更

SQL Server ->> 尝试优化ETL中优化Merge性能

这几天突发想到在ETL中Merge性能的问题.思路的出发点是Merge到目标表需要扫描的数据太多,而现实情况下,假设应该是只有一小部分会被更新,而且这部分数据也应该是比较新的数据,比方说对于想FactOrders这样一张表,一些越日期越久远的订单可能不可能被更新.那么整个思路就是减小每次需要从磁盘加载目标表到内存中跟stage表进行merge操作的数据量.只是我存在着两个疑问,这也是我问题要进行下面实验的原因. 前提条件是:目标表通过日期进行分区. 第一个疑问:在索引的作用下,SQL Serve

SQL Server 中Merge 的使用

很多人都知道ORACLE中有Merge關鍵字,其實SQL Server從2008版本開始也支持Merge了. 從而也可以像ORACLE一樣在一條SQL語句中同時進行Update.Insert.Delete操作. 下面來一個簡單的例子,直接上代碼了, 數量準備: IF OBJECT_ID('TestA','U') IS NOT NULL DROP TABLE TestA GO IF OBJECT_ID('TestB','U') IS NOT NULL DROP TABLE TestB GO CRE

SQL Server中的Merge关键字

简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:"根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.",通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的. 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表

【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Se

sql server中的merge

http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html 简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.”,通过这个描述,我们可以看出Me

SQL Server 使用 Merge 关键字进行表数据同步

简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的. 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做