• Merge 的小技巧


    今天跟大家分享一下搬动数据使用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

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

  • 相关阅读:
    页面上有10个多选框,实现三个按钮(重置、反选、全选)功能
    鼠标点哪 哪出15*15的圆型div
    es写简单的留言板
    面试准备(3)事件循环
    面试准备(2)async+await的使用与原理
    面试准备(1)重排与重绘和验证码
    vue项目修改el-input样式
    echarts画雷达图详解
    决心
    国庆中秋
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/4999330.html
Copyright © 2020-2023  润新知