SQL Server更改列名称以进行说明

时间:2017-05-30 19:07:13

标签: sql-server columnname

我有一个显示数据的表dbo.EX_DD12,但表列的代码已分配(DD12001, DD12002, DD12003....DD12055)。

此查询:

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

1 个答案:

答案 0 :(得分: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参考: