我想知道我应该用什么来迭代来自
的数据 temp Table1(15 columns + ID_autoinc)
并在真实的
Table2(10 colums + ID_autoinc) and real Table3(6 columns + ID_autoinc)?
同样在Table2上插入数据时,我需要使用标识将其插入Table3。
Conceptualy我需要:
SELECT * FROM Table1 into #TempTable1
FOREACH-> Record in #TempTable1 {
INSERT INTO Table2(col1 ... col10) VALUES(#TempTable1.col1 ... #TempTable1.col10)
DECLARE @Table2Identity as int
@Table2Identity = SCOPE_IDENTITY()
INSERT INTO Table3(col1 ... col6) VALUES(@Table2Identity, #TempTable1.col11 ... #TempTable1.col15)
}
答案 0 :(得分:2)
MERGE Table2 AS target
using (select all column from table1 )) as source
on 0=1
WHEN NOT MATCHED then
INSERT (column name of table2 ) --table2
VALUES (mention those column from source which need to insert int table2) --those
OUTPUT inserted.id,mention those column from source which need to insert int table1 INTO DetailsTable;
--inserted.id is that id of table2 that will be inserted in table2
试着问
答案 1 :(得分:1)
为什么需要迭代Table1的数据?您可以使用Table1中的SELECT对Table2和Table3执行INSERT语句,例如:
INSERT Table2(<Column1, Column2 etc)
SELECT Col1, Col2, etc from Table1;
并对Table3执行相同操作。在插入Table2和Table3之前,您还没有提到要对Table1中的数据执行什么(如果有)处理
答案 2 :(得分:1)
你可以声明一个cursor并循环遍历每一行,但它比它需要的速度慢且复杂。
我认为你实际上并不需要临时表。
如果Table2目前没有任何内容,那么就这样做:
insert into Table2 (col1, col2, ..)
select col1, col2, ..
from Table1
insert into Table3 (ID, col1, col2, ..)
select ID, col1, col2, ..
from Table2
请注意,Table3.ID
如果要插入其中,则不能是identity
列。
如果Table2已经有一些数据,你应该可以这样做:
begin transaction
declare @oldId int = select isnull(max(ID),0) from Table2
insert into Table2 (col1, col2, ..)
select col1, col2, ..
from Table1
insert into Table3 (ID, col1, col2, ..)
select ID, col1, col2, ..
from Table2
where ID > @oldID
commit