Sql 如何在循环中使用动态列名?
我有一个SQL语句:Sql 如何在循环中使用动态列名?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个SQL语句: INSERT INTO Table1 ( A, B, C, D, ) SELECT id, name1, middlename1, lastname1 FROM Table2 我想将这个INSERT INTO语句放在一个循环中,每次迭代时,表2中的列都会发生变化,例如: INSERT INTO Table1 ( A, B, C, D, ) SELECT id, name2, middlename2, lastname2 FROM Table
INSERT INTO Table1
(
A,
B,
C,
D,
)
SELECT id, name1, middlename1, lastname1 FROM Table2
我想将这个INSERT INTO语句放在一个循环中,每次迭代时,表2中的列都会发生变化,例如:
INSERT INTO Table1
(
A,
B,
C,
D,
)
SELECT id, name2, middlename2, lastname2 FROM Table2
有办法做到这一点吗
编辑-
表2
有以下列:
Name1, Name2, Name3, etc.
这些需要作为行进入另一个表:
Name1
Name2
Name3
...
听起来您需要在表中取消填充表,然后插入它。这会将您的转换转换为行 根据您的SQL Server版本,您有不同的选项 如果您使用的是SQL Server 2008+,则可以使用
交叉应用
和值
:
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
听起来您需要在表中取消填充表,然后插入它。这会将您的转换转换为行 根据您的SQL Server版本,您有不同的选项 如果您使用的是SQL Server 2008+,则可以使用
交叉应用
和值
:
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
你能发布你的表结构吗,可能有更好的方法来实现这一点?同意@BlueFoots,我认为你可能不需要一个循环来实现这个目的。如果你详细说明,可能会有一个更好的解决方案。你能发布你的表结构吗,可能有更好的方法来做到这一点吗?同意@BlueFoots,我认为你可能不需要一个循环来达到这个目的。如果你再详细说明一下,可能会有更好的解决方案。我想交叉申请是我要找的。试一下,几分钟后再报告。谢谢蓝:)我想交叉申请是我要找的。试一下,几分钟后再报告。谢谢蓝:)