今天跟大家分享一下搬动数据使用Merge的方法。

有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系。比如我现在有架构相同的两组table ,

A1 A2 和 T1 T2

create table A1(ID int identity(1,1) primary key,Name varchar(50));
create table A2(ID int identity(1,1) primary key,A1ID int,Name varchar(50)); create table T1(ID int identity(1,1) primary key,Name varchar(50));
create table T2(ID int identity(1,1) primary key,T1ID int,Name varchar(50)); --随便插入几条数据
insert into A1(Name) values ('A'),('C'),('B'),('D'),('E'),('F'); --随便删除几条,让ID断号
delete from A1 where ID in (2,4);
insert into A2(A1ID,Name) values (1,'AA'),(3,'BB'),(5,'EE'),(6,'FF'); --看下数据
select * from A1;
ID Name
----------- --------------------------------------------------
1 A
3 B
5 E
6 F
select * from A2;
ID A1ID Name
----------- ----------- --------------------------------------------------
1 1 AA
2 3 BB
3 5 EE
4 6 FF

然后我要将数据搬到 T1 T2 里面,这里就涉及一个ID对应的问题了,我怎么知道 A1的ID = 3对应是T1 的ID = ? 呢(当然你是可以使用 identity insert 的 ╮(╯_╰)╭) ,但是既然要用Merge。那我就用Merge

--建一个临时表存放一下对应关系
create table #Tmp(A1ID int,T1ID int); --用Merge来插入,把插入结果Output到临时表里面
merge T1
using A1
on 1 = 0
when not matched then insert (Name) values(Name) output A1.ID,inserted.ID into #Tmp(A1ID,T1ID); --这样#Tmp就存有 A1 和 T1 的ID对应关系啦
insert into T2(T1ID,Name)
select #Tmp.T1ID,A2.Name
from A2
inner join #Tmp ON A2.A1ID = #Tmp.A1ID; select * from T1
ID Name
----------- --------------------------------------------------
1 A
2 B
3 E
4 F select * from T2
ID T1ID Name
----------- ----------- --------------------------------------------------
1 1 AA
2 2 BB
3 3 EE
4 4 FF

然后数据就搬过去了,然后故事就完了。。。。。

Merge 的小技巧的更多相关文章

  1. 「小技巧」使用Git从其他分支merge个别文件

    小明发现在实际项目开发过程中,总会遇到各种各样的情况,比如一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,分别开发. 项目背景 产品经理:我们本次开发三个功能 ...

  2. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  3. Git 小技巧

    分享git的几个小技巧,后面会根据使用补充.目前包括git撤销本地修改.git回退到前n个版本.git多用户提交冲突解决.git 命令简化.欢迎大家补充^_* 1.git撤销本地修改 git rese ...

  4. 你想的到想不到的 javascript 应用小技巧方法

    javascript 在前端应用体验小技巧继续积累. 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElemen ...

  5. 50分钟学会Laravel 50个小技巧

    50分钟学会Laravel 50个小技巧 时间 2015-12-09 17:13:45  Yuansir-web菜鸟 原文  http://www.yuansir-web.com/2015/12/09 ...

  6. Mendeley使用小技巧

    合并重复论文 在导入论文时,可能出现新导入的一篇论文是自己之前看过的,但是可能因为某些原因,如来源不是同一个网址,arxiv 和 ICCV,两篇相同内容的文献同时存在. Mendeley 提供一个方法 ...

  7. 50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)

    转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 50分钟学会Laravel 50个小技巧 原文链接:< 50 Laravel Tricks in 50 Mi ...

  8. mercurial的几个易用性小技巧

    其实这两年,能够采用mercurial的项目我都尽量用,甚至有些上游是git的,或者需要托管到公司内gitlab上与别人协作的,我都装上hg-git.无它,只是因为mercurial易用性比git好得 ...

  9. avascript小技巧

    avascript小技巧 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture() ...

随机推荐

  1. 随笔jade

    mixin在刚使用的时候写错,写成了minxin,然后进行命令生成,发现报错 查了蛮久,由于开发工具并没有提示错误,最后找到了这样的错误,记下来,望大家不要重复爬坑

  2. 我为NET狂群福利:逆天常用的一些谷歌浏览器插件

    逆天书库:http://www.cnblogs.com/dunitian/p/5734677.html 常用工具:http://www.cnblogs.com/dunitian/p/5640147.h ...

  3. ubuntu 安装Elasticsearch5.0(Debian包)

    通过Debian包安装Elasticsearch Elasticsearch的Debian包可以从downloaded from our website或APT repository 它可以用于在任何 ...

  4. 逆向工程 - Reveal、IDA、Hopper、HTTPS抓包 等

    目录: 一. iOS 如何做才安全 二.ipa文件 三.沙盒 中的数据 四.Reveal:查看 任何APP 的UI结构 五.反编译工具:IDA 六.反编译工具:Hopper Disassembler ...

  5. Memcache缓存系统构建一

    在如今这个高效率的社会中,怎样将这个高效率应用到自己的程序中,是一个值得追寻和值得探讨的问题.因为这个memcache能够很好的提高检索速度,提升用户体验,而且重要的是减少数据库的访问.这就大大的提高 ...

  6. C#泛型方法解析

    C#2.0引入了泛型这个特性,由于泛型的引入,在一定程度上极大的增强了C#的生命力,可以完成C#1.0时需要编写复杂代码才可以完成的一些功能.但是作为开发者,对于泛型可谓是又爱又恨,爱的是其强大的功能 ...

  7. 如何在Windows Server 2008 R2没有磁盘清理工具的情况下使用系统提供的磁盘清理工具

    今天,刚好碰到服务器C盘空间满的情况,首先处理了临时文件和有关的日志文件后空间还是不够用,我知道清理C盘的方法有很多,但今天只分享一下如何在Windows Server 2008 R2没有磁盘清理工具 ...

  8. 【中文分词】条件随机场CRF

    之前介绍的MMEM存在着label bias问题,因此Lafferty et al. [1] 提出了CRF (Conditional Random Field). BTW:比较有意思的是,这篇文章的二 ...

  9. ChatSecure

    ChatSecure是一个免费和开源消息传递应用程序的特性 OTR加密在 XMPP. 你可以连接到现有的谷歌帐户或创建新帐户 公共XMPP服务器(包括通过 Tor),甚至 连接到您自己的服务器额外的安 ...

  10. Linux下Weblogic创建域方法和步骤

    Weblogic 创建域 以weblogic帐号登录(与创建域目录相对应账户) cd /home/weblogic/bea/weblogic92/common/bin 执行./config.sh进入配 ...