如何在循环中使用动态列名?

时间:2013-03-13 17:39:13

标签: sql sql-server tsql

我有一个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

...

1 个答案:

答案 0 :(得分:3)

听起来您需要取消忽略表中的表格然后插入它。这会将您的转换转换为行。

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

如果您使用的是SQL Server 2008+,则可以使用CROSS APPLYVALUES

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