2013-03-13 5 views
0

У меня есть SQL заявление:Как использовать динамические имена столбцов в цикле?

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

Я хочу поставить эту вставку в заявлении в цикле, где каждый раз, когда я итерацию, столбцы от изменения Table2, такие как:

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

Есть способ сделать это?

EDIT -

Table2 имеет следующие столбцы:

Name1, Name2, Name3, etc. 

Они должны пойти в другую таблицу построчно:

Name1 

Name2 

Name3 

... 
+1

Вы можете разместить вашу структуру таблицы, там вероятно, лучшие способы сделать это? – Taryn

+0

Согласитесь с @bluefeet, я думаю, вам может не понадобиться цикл для этой цели. Если вы уточните больше, может быть лучшее решение. – Kaf

ответ

3

Это звучит, как вам нужно UNPIVOT в таблицу в таблице, а затем вставьте ее. Это преобразует ваши преобразования в строки.

В зависимости от вашей версии SQL Server у вас есть разные варианты.

Если вы используете SQL Server 2008+, то вы можете использовать CROSS APPLY и 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 
+0

Я думаю, что крест применяется то, что они ищут. попробуем попробовать и отчитаться в нескольких. спасибо синему :) –

Смежные вопросы