2013-03-13 42 views
0

我有一個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 Table2 

有一種方法來做到這一點?

編輯 -

Table2有以下欄目:

Name1, Name2, Name3, etc. 

這些需要進入另一個表爲行:

Name1 

Name2 

Name3 

... 
+1

你可以發佈你的表結構,有可能是更好的方法來做到這一點? – Taryn

+0

同意@bluefeet,我想你可能不需要一個循環來達到這個目的。如果您詳細闡述,可能會有更好的解決方案。 – Kaf

回答

3

這聽起來像你需要unpivot的的然後將表格插入表格中。這會將你的轉換器轉換成行。

根據您的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 
+0

我認爲交叉適用是我在尋找的。要試一試,並在少數情況下報告。謝謝藍色:) –

相關問題