0

我有一条 SQL 语句:

INSERT INTO Table1
(
  A,
  B,
  C,
  D,
)
SELECT id, name1, middlename1, lastname1 FROM Table2

我想把这个 INSERT INTO 语句放在一个循环中,每次迭代时,Table2 中的列都会发生变化,例如:

INSERT INTO Table1
(
  A,
  B,
  C,
  D,
)
SELECT id, name2, middlename2, lastname2 FROM Table2

有没有办法做到这一点?

编辑 -

Table2具有以下列:

Name1, Name2, Name3, etc.

这些需要作为 ROWS 进入另一个表:

Name1

Name2

Name3

...
4

1 回答 1

3

听起来您需要取消透视表中的表才能插入它。这会将您的转换转换为行。

根据您的 SQL Server 版本,您有不同的选择。

如果您使用的是 SQL Server 2008+,那么您可以使用CROSS APPLYand VALUES

insert into table1 (A, B, C, D)
select t.id,
  c.col1,
  c.col2,
  c.col3
from yourtable t
cross apply
(
  values 
    (name1, middlename1, lastname1),
    (name2, middlename2, lastname2),
    (name3, middlename3, lastname3)
) c (col1, col2, col3);

或者您可以使用UNION ALL查询:

insert into table1 (A, B, C, D)
select id, name1 col1, middlename1 col2, lastname1 col3
from yourtable
union all
select id, name2 col1, middlename2 col2, lastname2 col3
from yourtable
union all
select id, name3 col1, middlename3 col2, lastname3 col3
from yourtable
于 2013-03-13T17:51:33.020 回答