获取未知列数的名称,ID和数据

时间:2011-02-11 00:27:55

标签: sql-server sql-server-2008

如果我有一行包含一行数据,我怎么样'转换它并获取它拥有的数据?

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 :(得分:0)

您需要动态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)