0

我有一个表 tSource,它是笛卡尔积的 SELECT 结果,因此集合中没有唯一 ID。简而言之,可以说该表如下所示:

tSource
-------
f1 | f2
-------
 H |  a
 I |  b
 J |  c
 K |  d
 K |  d

我需要将 tSource 的数据“拆分”为彼此相关的 tbl1 和 tbl2:

tbl1             tbl2
-------          -----------------
ID | f1          ID | tbl1_ID | f2
-------          -----------------
11 |  H          51 |      11 |  a
12 |  I          52 |      12 |  b
13 |  J          53 |      13 |  c
14 |  K          54 |      14 |  d
15 |  K          55 |      15 |  d

两个目标表中的 ID 列都是 INT IDENTITY

任何帮助将不胜感激,thanx提前

4

3 回答 3

2

在 MERGE + OUTPUT 语句中完全执行两个插入操作。

merge @table2 as t2
using (
    select *
    from @table
) as src
on (1 = 2)
when not matched then
    insert (f1)
    values (src.f1)
output inserted.ID, src.f2 into @table3 (f1ID, f2)
;

完整的例子:

declare @table table (
    f1 char(1)
    , f2 char(1)
)

insert @table
values
('H', 'a')
, ('I', 'b')
, ('J', 'c')
, ('K', 'd')


declare @table2 table (
    ID int not null identity
    , f1 char(1)
)

declare @table3 table (
    ID int not null identity
    , f1ID int not null
    , f2 char(1)
)

merge @table2 as t2
using (
    select *
    from @table
) as src
on (1 = 2)
when not matched then
    insert (f1)
    values (src.f1)
output inserted.ID, src.f2 into @table3 (f1ID, f2)
;

select *
from @table2

select *
from @table3
于 2013-05-14T11:51:43.447 回答
1

第1部分-:

insert into tbl1(f1)  select f1 from tSource;

第2部分-:

Insert into Tabl2 (tbl1_id,f2)
(
Select id,f2 from (Select Row_Number() Over(Partition by id order by id) as row,t1.f2,t2.id from t1 ,t2) a 
where row=(Select r from
( Select Row_Number() over(Order by id)as r,id  from t2) b where b.id=a.id)
)

这里什么选择第 2 部分返回 .... SQL Fiddle 演示

于 2013-05-14T11:44:20.343 回答
0

这不是完全正确的 SQL(因为我不知道类型),但我想你会明白的

create table tbl1(ID primary key identity, f1, f2)

insert into tbl1(f1, f2) select f1, f2 from tSource

create table tbl2(ID primary key identity, tbl1_ID not null, f2)

insert into tbl2(tbl1_ID, f2) select ID, f2 from tbl1

alter table tbl1 drop column f2

alter table tbl2 add constraint myForeignKey foreignkey(tabl1_ID) references tbl1(ID)
于 2013-05-14T11:17:15.473 回答