sql server 2008 merge matched判定条件

SQL Server 2008 开始支持 MERGE语句 

-- 源表

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

原文地址:https://www.cnblogs.com/ztf20/p/12134200.html

时间: 2024-11-03 11:02:53

sql server 2008 merge matched判定条件的相关文章

SQL Server 2008中的MERGE(不仅仅是合并)

SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入.更新或删除操作.最典型的应用就是进行两个表的同步. 下面通过一个简单示例来演示MERGE语句的使用方法,假设数据库中有两个表Product及ProductNew,我们的任务是将Product的数据同步到ProductNew(当然同步可能是每天通过Job来自动完成的,在此我们只关注MERGE的使用). 以下SQL创建示例表: --源表 CREATE TABLE Product (     Produc

SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)

SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx 功能:根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步. 我们看一个例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新总产品列表. 总产品表,分店产品表结构完全一致: if OBJECT_ID('

sql server 2008按条件筛选重复记录

通常我们查重是这么写的,按照某个条件筛选重复 select * from dbo.T_ECert a where (a.ECERTID) in (select ECERTID from T_ECert group by ECERTID+idcard having count(*) > 1) 但是如果需要有多个条件怎么办呢? oracle可以这样 select * from dbo.T_ECert a where (a.ECERTID,a.idcard) in (select a.ECERTID,

22. SQL -- SQL Server 2005 和SQL Server 2008新特性

SQL SERVER 2005 与SQL SERVER 2008 新特性   SQLSERVER 2005 新特性 Enhanced Data Types:存储最大8K-2G Partitioned Table(分区表):数据拆分管理 背景:一个公司,有目前现存数据以及历史数据,各在一台SER 上,服务器访问方式: SQL 2000 TABLE 1:在一张table 中,对数据进行分区 Enhanced Indexing Features SER 1 SER 2 现存数据 TABLE 1 TAB

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

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

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

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

SQL Server 2008性能故障排查(二)——CPU

原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好了版,贴上来就乱得不成样了.建议CSDN改进这部分.也请大家关注内容不要关注排版.同时在翻译的过程中本人也整理了一次思路,所以还似乎非常愿意翻译,虽然有点自娱自乐,但是分享给大家也是件好事 CPU 瓶颈: CPU瓶颈可能因为某个负载所需的硬件资源不足而引起.但是过多的CPU使用通常可以通过查询优化(

SQL Server 2008 分区函数和分区表详解

SQL Server 2008 分区函数和分区表详解 2012-10-28 20:06 来源:博客园 作者:zhijianliutang 字号:T|T [摘要]本文详细介绍SQL Server 2008 分区函数和分区表,包括查询某个分区.归档数据.添加分区.删除分区等内容. 当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门数据的查询就可以更快的运行,基本原理就是,因为要扫描的数据变的更小.维护任务(例如,重新生成索引或备份表)也可以更快的运行. 我们可以再不通过将表物

深入浅出SQL Server 2008 分区函数和分区表

原文:深入浅出SQL Server 2008 分区函数和分区表 当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门数据的查询就可以更快的运行,基本原理就是,因为要扫描的数据变的更小.维护任务(例如,重新生成索引或备份表)也可以更快的运行. 我们可以再不通过将表物理放置在多个磁盘驱动器上来拆分表的情况下获取分区.如果将某个表放置在一个物理驱动器上,将相关表放置在另一个驱动器上,则可以提高查询性能,因为当运行涉及表间连接的查询时,多个磁盘头同时读取数据.可以使用SQL Ser