SQL复制多表数据
最近在客户这边维护的时候,他们有需要把现在的数据复制到以前,应付检查.所以我就写了些SQL来复制该数据
废话少说,把代码贴出来,大家看看
Code
--删除临时表
drop table #tmp1
drop table #tmp2
drop table #tmp3
--获取数据
select id,company_id,examine_date,moderator_party,moderator_id = case when moderator_id='17adfa4692f248a180b9b4ad65835244' then '59cfe656178c45f1ab24355699f00cdb' when moderator_id='161887e22a3b46afa2033a8fa7a3585a' then '1b5a7b3472e34a1b8d350207ce6c0dac' else moderator_id end into #tmp1 from train_examine where year(examine_date)=2008 and month(examine_date)<7 and company_id = '35020009' order by examine_date
select * into #tmp2 from train_examine_item where train_examine_id in(select id from #tmp1)
select * into #tmp3 from train_examine_item_item where train_examine_item_id in (select id from #tmp2)
--添加临时字段
alter table #tmp1 add NID nvarchar(32)
alter table #tmp2 add NID nvarchar(32)
alter table #tmp2 add NNID nvarchar(32)
alter table #tmp3 add NID nvarchar(32)
--为临时字段赋值
update #tmp1
set nid = id
update #tmp2
set nid = train_examine_id,
nnid = id
update #tmp3
set nid=train_examine_item_id
select * from #tmp1
select * from #tmp2
select * from #tmp3
--修改临时表的信息,并重新关联
update #tmp1
set id=replace(newid(),'-',''),
examine_date =dateadd(month,6,dateadd(year,-2,examine_date))
update #tmp2
set id=replace(newid(),'-',''),
train_examine_id = #tmp1.id
from #tmp1
left join #tmp2
on #tmp1.nid = #tmp2.nid
update #tmp3
set train_examine_item_id = #tmp2.id
from #tmp2
left join #tmp3
on #tmp2.nnid = #tmp3.nid
--删除临时字段
alter table #tmp1 drop column nid
alter table #tmp2 drop column nid
alter table #tmp2 drop column nnid
alter table #tmp3 drop column nid
--插入数据
insert into train_examine
select * from #tmp1
insert into train_examine_item
select * from #tmp2
insert into train_examine_item_item
select * from #tmp3
--删除临时表
drop table #tmp1
drop table #tmp2
drop table #tmp3
--获取数据
select id,company_id,examine_date,moderator_party,moderator_id = case when moderator_id='17adfa4692f248a180b9b4ad65835244' then '59cfe656178c45f1ab24355699f00cdb' when moderator_id='161887e22a3b46afa2033a8fa7a3585a' then '1b5a7b3472e34a1b8d350207ce6c0dac' else moderator_id end into #tmp1 from train_examine where year(examine_date)=2008 and month(examine_date)<7 and company_id = '35020009' order by examine_date
select * into #tmp2 from train_examine_item where train_examine_id in(select id from #tmp1)
select * into #tmp3 from train_examine_item_item where train_examine_item_id in (select id from #tmp2)
--添加临时字段
alter table #tmp1 add NID nvarchar(32)
alter table #tmp2 add NID nvarchar(32)
alter table #tmp2 add NNID nvarchar(32)
alter table #tmp3 add NID nvarchar(32)
--为临时字段赋值
update #tmp1
set nid = id
update #tmp2
set nid = train_examine_id,
nnid = id
update #tmp3
set nid=train_examine_item_id
select * from #tmp1
select * from #tmp2
select * from #tmp3
--修改临时表的信息,并重新关联
update #tmp1
set id=replace(newid(),'-',''),
examine_date =dateadd(month,6,dateadd(year,-2,examine_date))
update #tmp2
set id=replace(newid(),'-',''),
train_examine_id = #tmp1.id
from #tmp1
left join #tmp2
on #tmp1.nid = #tmp2.nid
update #tmp3
set train_examine_item_id = #tmp2.id
from #tmp2
left join #tmp3
on #tmp2.nnid = #tmp3.nid
--删除临时字段
alter table #tmp1 drop column nid
alter table #tmp2 drop column nid
alter table #tmp2 drop column nnid
alter table #tmp3 drop column nid
--插入数据
insert into train_examine
select * from #tmp1
insert into train_examine_item
select * from #tmp2
insert into train_examine_item_item
select * from #tmp3