получить имена, идентификаторы и данные неизвестного количества столбцов - PullRequest
0 голосов
/ 11 февраля 2011

если у меня есть таблица с одной строкой данных, как мне «нравится», транспонировать ее и получать данные, которые она имеет ??

item1 item2 item3  item4...  itemn
  101   102   103    104...      n

Как мне получить что-то вроде

name  colid  value
item1     1    101
item2     2    102
item3     3    103
item4     4    104
...
itemn     n      n 

@ dzibul ответит что-то похожее, но пропущенная часть - как извлечь данные ???

select name, colorder from syscolumns where id = (select id from sysobjects where name = [tablename])

1 Ответ

0 голосов
/ 11 февраля 2011

Для этого вам потребуется динамический SQL.

Рабочий пример

create table onerowdata(item1 int, item2 int, item3 int, dt datetime, itemn varchar(100));
insert onerowdata select 101, 102, 103, getdate(), 'TEST DATA';

declare @tbl sysname set @tbl = 'onerowdata'
declare @sql nvarchar(max)
select @sql = isnull(@sql+' union all ','')
    + 'select '
    + quotename(column_name, '''') + ' name,'
    + RIGHT(ORDINAL_POSITION,12) + ' colid,'
    + 'convert(varchar(max),' + quotename(column_name) + ') value'
    + ' from ' + quotename(@tbl)
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @tbl
order by ORDINAL_POSITION
select @sql = @sql + ' order by 2'
--print @sql
exec (@sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...