一个批量复制的问题

play7788 2009-04-01 02:22:00

DECLARE @new_a_id int

declare @a table(a_id int IDENTITY(1,1),a_data int)
insert into @a select 1000
insert into @a select 2000

declare @b table(b_id int IDENTITY(1,1),b_a_id int,b_data int )
insert into @b select 1,1111
insert into @b select 1,2222
insert into @b select 1,3333
insert into @b select 2,4444
insert into @b select 2,5555
insert into @b select 2,6666

declare @c table(c_id int IDENTITY(1,1),c_a_id int,c_b_id_1 int,c_b_id_2 int)
insert into @c select 1,1,2
insert into @c select 1,1,3
insert into @c select 2,4,5
insert into @c select 2,5,6

insert into @a(a_data) select a_data from @a where a_id=1

SET @new_a_id = @@IDENTITY;

insert into @b(b_a_id,b_data) select @new_a_id,b_data from @b where b_a_id=1

select * from @a
select * from @b
select * from @c


结果:
a_id a_data
----------- -----------
1 1000
2 2000
3 1000

b_id b_a_id b_data
----------- ----------- -----------
1 1 1111
2 1 2222
3 1 3333
4 2 4444
5 2 5555
6 2 6666
7 3 1111
8 3 2222
9 3 3333

c_id c_a_id c_b_id_1 c_b_id_2
----------- ----------- ----------- -----------
1 1 1 2
2 1 1 3
3 2 4 5
4 2 5 6

这时候c表还没有做批量复制,我希望得到如下的c表:

c_id c_a_id c_b_id_1 c_b_id_2
----------- ----------- ----------- -----------
1 1 1 2
2 1 1 3
3 2 4 5
4 2 5 6
5 3 7 8
6 3 7 9


c表里c_b_id_1和c_b_id_2存的都是b表的id,复制的时候,重新绑定c_b_id_1和c_b_id_1是根据b表的b_data

实际的表比这个复杂得多,并且用游标实现,我希望不用游标,如何实现。
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_guijun 2009-04-01
  • 打赏
  • 举报
回复
ddd
play7788 2009-04-01
  • 打赏
  • 举报
回复
you太狠了,这分你欠我的。
liangCK 2009-04-01
  • 打赏
  • 举报
回复
想出答案,偶就接分吧
play7788 2009-04-01
  • 打赏
  • 举报
回复
我晕,愚人节放大假么?1小时没人回答,我自己都想出答案了。


insert into @c(c_a_id,c_b_id_1,c_b_id_2)
select
@new_a_id,
(select b_id from @b where b_data=(select b_data from @b where b_id=c_b_id_1) and b_a_id=@new_a_id) as c_b_id_1,
(select b_id from @b where b_data=(select b_data from @b where b_id=c_b_id_2) and b_a_id=@new_a_id) as c_b_id_2

from @c where c_a_id=1
play7788 2009-04-01
  • 打赏
  • 举报
回复
补充一下,一共三张表,a是主表,b是a的子表,c是对b的重构,并且冗余了a的id。

此例的复制条件是a.a_id=1的,将a,b,c相关记录都复制一条。

现在a,b表复制没问题,但是c是b的重构表,如何获得新插入的c表记录的c_b_id_1和c_b_id_2字段的值。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧