【问题标题】:SQL Server change column name for descriptionSQL Server 更改描述的列名
【发布时间】:2017-05-30 19:07:13
【问题描述】:

我有一个显示数据的表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

【问题讨论】:

  • 请注意:通常被混淆的数据库是有原因的,并且有一个 Web 服务/其他集成点,您应该使用它来代替数据库查询......
  • 只需添加别名
  • 我不认为他想添加别名,他想从其他表名中获取描述为 COLUMN_NAME
  • 我正在寻找另一种插入别名的方式,因为大约有 100 列,在示例中我使用了 3

标签: sql-server columnname


【解决方案1】:

在 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参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2021-06-14
    • 2014-07-12
    相关资源
    最近更新 更多