merge源表数据移植到目标表新表数据中
merge into dbo.ak_SloteCardTimes a using(select RecordID,CardNO,SloteCardTime from dbo.Tb_CardDate b ) c on(a.RecordID=c.RecordID)
when matched then update set a.CardNO=c.CardNO ,a.SloteCardTime=c.SloteCardTime
when not matched then insert(RecordID,CardNO,SloteCardTime)
values(c.RecordID,c.CardNO,c.SloteCardTime);
知识温故和梳理引用:
创建表一为源表:
CREATE TABLE Product
(
ProductID varchar(7) NOT NULL PRIMARY KEY,
ProductName varchar(100) NOT NULL,
Price decimal(13,2) DEFAULT 0
); INSERT INTO Product
Values
('4100030','iPhone5c',5500),
('4100031','iPhone4',3200),
('4100037','iPhone5s',5500),
('4100038','iPhone4s',3200);
目标表:
CREATE TABLE ProductNew
(
ProductID varchar(7) NOT NULL PRIMARY KEY,
ProductName varchar(100) NOT NULL,
Price decimal(13,2) DEFAULT 0
);
--MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步
--显然Product与ProductNew表的MERGE匹配条件为主键ProductID字段,初始情况下,ProductNew表为空,此时肯定执行的是WHEN NOT MATCHED THEN后的语句,我们先只考虑源表递增的情况,MERGE语句如下:
MERGE ProductNew AS d
USING Product AS s
ON s.ProductID = d.ProductId
WHEN NOT MATCHED THEN
INSERT( ProductID,ProductName,Price)
VALUES(s.ProductID,s.ProductName,s.Price); --现在,我们更新Product表4100030产品的价格,将其修改为9500:
--我们也希望每天同步的时候应该将更新后的价格同步到ProductNew表,显然此时在MERGE语句中应该添加WHEN MATCHED THEN 语句,该语句来更新ProductNew表的价格,添加匹配更新后的MERGE语句:
MERGE ProductNew AS d --目标表
USING Product AS s --源表
ON s.ProductID = d.ProductId --匹配条件
WHEN NOT MATCHED THEN
INSERT( ProductID,ProductName,Price)
VALUES(s.ProductID,s.ProductName,s.Price)
WHEN MATCHED THEN
UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
-- 我们的UPDATE语句里面没有更新ProductID字段,因为这是完全没必要的(如果修改了ProductID字段会直接走到NOT MATCHED)。
--假如我么会把源表删除一条数据 即源表存在三条数据而 目标表有四条数据
-- WHEN NOT MATCHED BY TARGET 表示目标表不匹配,BY TARGET是默认的
--WHEN NOT MATCHED BY SOURCE 表示源表不匹配,即目标表中存在,源表中不存在的情况。现在我们要完成源表DELETE后,目标表的同步动作,MERGE语句如下:
MERGE ProductNew AS d
USING Product AS s
ON s.ProductID = d.ProductId
WHEN NOT MATCHED BY TARGET --表示目标表不匹配,BY TARGET是默认的
THEN
INSERT( ProductID,ProductName,Price)
VALUES(s.ProductID,s.ProductName,s.Price)
WHEN NOT MATCHED BY SOURCE --表示源表不匹配,即目标表中存在,源表中不存在
THEN
DELETE
WHEN MATCHED THEN
UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
merge源表数据移植到目标表新表数据中的更多相关文章
- Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表
A库a表(红色为抽取字段): 关联用户表: B库b表(红色为抽取字段): 关联用户表 C目标库SYS_OPLOG表(c表) 利用kettle抽取A库a表(具体名称见上图),B库b表的上面红色框起来 ...
- Mysql5.7 单表 500万数据迁移到新表的快速实现方案
开发过程中需要把一个已有500万条记录的表数据同步到另一个新表中,刚好体验下Mysql官方推荐的大数据迁移的方案:SELECT INTO OUTFILE,LOAD DATA INFILE Mysql ...
- ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)
当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...
- MySQL之DDL数据定义语言:库、表的管理
库的管理 常用命令 #创建库 create database if not exists 库名 [ character set 字符集名]; create database if not exists ...
- Oracle-创建新表,创建备份表,对表中插入多条数据
一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...
- mysql ---复制表结构---创建新表
1.复制表结构及数据到新表CREATE TABLE 新表SELECT * FROM 旧表这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable;来删 ...
- JS基础-表单元素-新表单元素-js概述
1.表单元素 1.input元素 1.隐藏域和文件选项框 1.隐藏域 <input type="hidden"> 要提交给服务器的数据,但是不想展示给用户看可以放在隐藏 ...
- MySQL复制表结构和内容到另一个表中
一:(低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)1.复制表结构到新表CREATE TABLE 新表LIKE 旧表 2.复制旧表的数据到新表(假设两个表结构一样) ...
- php源码建博客5--建库建表-配置文件-错误日志
主要: 整理框架 建库建表 配置文件类 错误日志记录 --------------本篇后文件结构:-------------------------------------- blog ├─App │ ...
随机推荐
- Java从零开始学二十(集合简介)
一.为什么需要集合框架 数组的长度是固定的,但是如果写程序时并不知道程序运行时会需要多少对象.或者需要更复杂的方式存储对象,---那么,可以使用JAVA集合框架,来解决这类问题 二.集合框架主要接口 ...
- 【转】Spring中IoC的优点与缺点
1. 优点 我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建:或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接 ...
- Linux内核中网络数据包的接收-第一部分 概念和框架
与网络数据包的发送不同,网络收包是异步的的.由于你不确定谁会在什么时候突然发一个网络包给你.因此这个网络收包逻辑事实上包括两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协 ...
- Modifying a Request or Response
To make custom changes to web requests and responses, use FiddlerScript to add rules to Fiddler's On ...
- 替换 ionic 中的 图标
第一步,你把你的项目的SVG文件跟你自己做的图标的SVG文件都上到icomoon.io/app(上传方式上节已经讲过了,不会的翻下上节内容),会看到这么界面 第二步,点击下载后,出现这个页面,修改前缀 ...
- 开源 免费 java CMS - FreeCMS1.9 移动APP管理 网站配置
项目地址:http://www.freeteam.cn/ 网站配置 管理员能够在这里设置当前管理网站是否同意移动app訪问,是否默认移动APP网站.首页的布局,首页数据最多载入页数. 从左側管理菜单点 ...
- SQL Server表描述 及 字段描述的增、删、改、查询
SQL Server表描述 及 字段描述的增.删.改.查询 --测试: --创建表及描述信息 ),isname )) --为表添加描述信息 EXECUTE sp_addextendedproperty ...
- Android4.0-4.4 加入实体按键振动支持的方法(java + smali版本号)
有些手机比方泛泰A820L, 泛泰A890 A900 以及Nubia Z5S 和Z5S mini具有实体按键(这里所说的实体按键是相对于虚拟按键而言, 包括物理按键和触摸屏上多出来的触摸实体按键), ...
- 【Oracle】(savepoint)保存点的使用
作用 保存点可以回退到事务的一部分,我们在操作数据库的过程中可以对事务分隔为几个部分,在操作失误的时候就可以回滚到某个点即可. 实现步骤 我们现在新建一张表TMP003 )); 第一步:插入第一条记录 ...
- Linux 文件系统的目录定义
目录名称 应放置文件的内容 /boot 开机所需文件——内核,开机菜单及所需配置文件等 /dev 任何设备与接口都以文件形式存放在此目录 /etc 配置文件 /home 用户主目录 /bin 单用户维 ...