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

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

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

    SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入.更新或删除操作.最典型的应用就是进行两个表的同步. 下面通过一个简单示例来演示MERGE语句的使用方法 ...

  2. SQL Server 2008中的MERGE(数据同步)

    OK,就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入.更新或删除操作.最典型的应用就是进行两个表的同步. 下面通过一个简单示例来演 ...

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

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

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

    原文:深入浅出SQL Server 2008 分区函数和分区表 当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门数据的查询就可以更快的运行,基本原理就是,因为要扫描的数据变的 ...

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

    简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根 ...

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

    [摘要]本文详细介绍SQL Server 2008 分区函数和分区表,包括查询某个分区.归档数据.添加分区.删除分区等内容. 当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门 ...

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

    原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT ...

  8. 使用SQL Server 2008 维护计划(图解)

    使用Sql Server 2008的维护计划可以实现自动备份数据库,并自动删除过期备份的功能. 一.环境 OS: Microsoft Windows Server 2003 R2 soft:Micro ...

  9. SQL Server 2000向SQL Server 2008 R2推送数据

    [文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...

随机推荐

  1. linux学习笔记之makefile

    首先 make时工程管理器 而makefile则是make唯一的配置文件,当我们需要使用make管理工程时,我们需要建立一个makefile文件 简单点说,makefile是把我们所要编译的c文件结合 ...

  2. ECMAScript6新增数据类型symbol数据类型

    25.Symbol目的:为了解决对象之间属性名冲突的问题,Symbol它是引用数据类型. Symbol( ),它代表着一个独一无二的值 [name]: '小红',//加中括号代表默认创建了一个Symb ...

  3. Bytom侧链Vapor源码浅析-节点出块过程

    Bytom侧链Vapor源码浅析-节点出块过程 在这篇文章中,作者将从Vapor节点的创建开始,进而拓展讲解Vapor节点出块过程中所涉及的源码. 做为Vapor源码解析系列的第一篇,本文首先对Vap ...

  4. C#LeetCode刷题之#11-盛最多水的容器(Container With Most Water)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3615 访问. 给定 n 个非负整数 a1,a2,...,an,每 ...

  5. C#开发笔记之03-为什么选择IsNotXXX方法而不是IsXXX方法?

    C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/959 访问. 为什么有时候要选择IsNotXXX方法而 ...

  6. Vue 离开页面时的校验-mixin-beforeRouteLeave

    一定要看下函数前的注释, 需要在使用的页面定义[needCheckFlag]data属性 一定要看下函数前的注释, 需要在使用的页面定义[needCheckFlag]data属性 一定要看下函数前的注 ...

  7. vue_如何判断变量是数组还是对象

    一.typeof判断数据类型(判断数组跟对象都返回object) console.log(typeof null); // "object" console.log(typeof ...

  8. 19c新环境安装补丁(三)_推荐

    本次安装Oracle RAC 19.3 版本 Linux red-hat 7.8  DB安装补丁  RUR 20200717. 本次安装Oracle补丁的方法类似于11G RAC打补丁的方法.  [可 ...

  9. 一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

  10. JDK1.8源码学习-Object

    JDK1.8源码学习-Object 目录 一.方法简介 1.一个本地方法,主要作用是将本地方法注册到虚拟机中. private static native void registerNatives() ...