Merge 的小技巧

页面导航:首页 > 数据库 > MsSql > Merge 的小技巧

Merge 的小技巧

来源: 作者: 时间:2016-01-20 09:48 【

有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系。比如我现在有架构相同的两组table ,A1 A2 和 T1 T2create table A1(ID
有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系。比如我现在有架构相同的两组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
 
 
然后数据就搬过去了,然后故事就完了。。。。。
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<