2017-05-30 67 views
2

我有一个表dbo.EX_DD12显示数据,但表列中有一个代码分配(DD12001, DD12002, DD12003....DD12055)。SQL Server更改列名描述

这个查询:

SELECT * FROM [dbo.EX_DD12] 

返回结果是这样的:

Id | DD12001 | DD12002 | DD12003 
---+------------+------------+-------- 
1 | 12/12/2005 | 10:00 a.m. | x 
2 | 13/12/2005 | 10:00 a.m. | y 
3 | 14/12/2005 | 09:00 a.m. | x 

使用此查询,我可以得到说明:

SELECT 
    T0.name, T1.Description 
INTO 
    #TABLE00 
FROM 
    sys.columns T0 
INNER JOIN 
    dbo.EXDT T1 ON T0.name = Code 
WHERE 
    object_id = OBJECT_ID('dbo.EX_DD12') 
    AND T0.name LIKE 'DD12%' 

结果是这个样子:

Code | Description 
--------+------------- 
DD12001 | Date 
DD12002 | Time 
DD12003 | Priority 

我该怎么做才能在查询结果看起来像这样?

Id | Date  | Time  | Priority 
---+------------+------------+--------- 
1 | 12/12/2005 | 10:00 a.m. | x 
2 | 13/12/2005 | 10:00 a.m. | y 
3 | 14/12/2005 | 09:00 a.m. | x 
+0

刚一说明:以伪装通常数据库是这样的原因,并有你应该使用Web服务/其他集成点而不是数据库查询.... – Milney

+0

引用此:https://stackoverflow.com/questions/1252580/sql-selecting-column-names-as-values – uSeruSher

+0

只需添加别名 – xsami

回答

2

在SQL Server:

动态生成查询与和sp_executesql执行:

declare @sql nvarchar(max); 
declare @tbl sysname = 'dbo.EX_DD12' 

select @sql = 'select' + char(10) 
    + stuff((
    select char(10)+' , '+quotename(c.name) + case 
     when c.name != d.description 
      then ' as ' +quotename(coalesce(d.[Description],c.name)) 
     else '' 
     end 
     from sys.columns c 
     left join dbo.EXDT d 
      on c.name = d.[Code] 
     where c.object_id = object_id(@tbl) 
     order by c.column_id 
    for xml path (''), type).value('.','nvarchar(max)') 
    ,1,5,' ')+ char(10) 
    +'from '+quotename(schema_name(t.schema_id))+'.'+quotename(object_name(object_id(@tbl))) 
    from sys.tables t where t.object_id = object_id(@tbl) 

select @sql as CodeGenerated; 
--exec sp_executesql @sql; 

rextester演示:http://rextester.com/GGEL20070

回报:

+-----------------------------+ 
|  CodeGenerated  | 
+-----------------------------+ 
| select      | 
|  [id]     | 
| , [DD12001] as [Date]  | 
| , [DD12002] as [Time]  | 
| , [DD12003] as [Priority] | 
| from [dbo].[EX_DD12]  | 
+-----------------------------+ 

动态SQL参考: