2013-08-31 5 views
0

Я использовал СУБД SQL Serverполучить строки из таблицы с динамическими столбцами

У меня есть требование, чтобы получить строки из таблицы с динамическими колоннами

select * from TempXmlData 
T1 t2 t3 t4 
A B C D 

Т1, Т2, Т3, Т4 столбцов являются динамическими. Я создаю их с помощью xml config. Конечно, имя столбца существует в другом tables.like это

select * from #TempA 
--The Result 
T1 
T2 
T3 
T4 

Если конфигурация имеет пять столбцов, эта таблица HASE пять столбцов, если конфигурация имеет только один столбец, эта таблица имеет только один столбец.

Теперь я хочу получить значение от TempXmlData из этой таблицы. Мне нужно, чтобы положить значение вместе, как 'A','B',‘C’,'D'. Поэтому мне нужно получить значения из каждого столбца, столбец нефиксирован.

Если столбцы фиксирован, я могу использовать этот способ, чтобы получить значение

select @Value = T1(columnName) from TempXmlData 
+1

Почему !? Зачем ты это делаешь? – podiluska

+0

Business Need, и я закончил. –

+0

Что такое имя столбца в '# TempA'? –

ответ

0

Это то, что вы ищете?

SQL Fiddle

сервера Настройка MS SQL 2008 схемы:

CREATE TABLE TempA 
    (columnName varchar(2)) 
; 

INSERT INTO TempA 
    (columnName) 
VALUES 
    ('T1'), 
    ('T2'), 
    ('T3'), 
    ('T4') 
; 

CREATE TABLE TempXmlData 
    (T1 varchar(1), T2 varchar(1), T3 varchar(1), T4 varchar(1)) 
; 

INSERT INTO TempXmlData 
    (T1, T2, T3, T4) 
VALUES 
    ('A', 'B', 'C', 'D') 
; 

Запрос 1:

DECLARE @colTable table(rownum int, columnName varchar(20)) 
INSERT INTO @colTable SELECT row_number() over (ORDER BY columnName), columnName FROM TempA 
DECLARE @query varchar(500) 
DECLARE @i int, @max int 
SET @i = 1 
SET @max = (SELECT count(*) FROM @colTable) 
SET @query = 'select ' 
WHILE @i <= @max 
BEGIN 
    IF @i > 1 SET @query = @query + ',' 
    SET @query = @query + (SELECT columnName FROM @colTable WHERE rownum = @i) 
    SET @i = @i + 1 
END 
SET @query = @query + ' from TempXmlData' 
exec(@query) 

Results:

| T1 | T2 | T3 | T4 | 
|----|----|----|----| 
| A | B | C | D | 
+0

Спасибо вашему пациенту ответ –

0

Вы не можете создать динамическое определение таблицы. Ваши единственные варианты - создать proc, который возвращает набор результатов. Внутри proc вы можете динамически строить инструкцию SQL внутри proc, читая строки из таблицы #TempA. См. Документацию по MS на cursors и sp_executesql.

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