在SQL Server中按当前日期动态定义列名称

时间:2012-03-25 09:34:25

标签: sql-server columnname

我有SELECT声明:

SELECT  
    ProjectId, 
    ProjectName,               
    D3 as "three month ago",
    D2 as "two month ago",
    D1 as "last month",
    F0 as "current month",
    F1 as "next month",
    F2 as "next two month",        
FROM
    View_Year_Forcast

我想根据当前月份指定列名。

我有一个函数get_month_name,它获取月份符号,如(d1,d2,d3,f0 ..),并返回一个字符串,表示希伯来语中的月份名称。

解决问题的最佳方法是什么?

只是为了记录我试图在SQL Server的存储过程中执行此操作

1 个答案:

答案 0 :(得分:1)

可以使用动态SQL执行此操作:

declare @month nvarchar(50)
declare @sql nvarchar(1000)

set @month = 'March' -- execute your `get_month_name` function here instead

set @sql = 'select D3 as ' + @month + ' from View_Year_Forcast'

exec sp_executesql @sql

但是,动态SQL存在问题。有关详细说明,请参阅The Curse and Blessings of Dynamic SQL

因此,如果它在某种程度上可行,我宁愿使用动态SQL,而是执行marc_s suggested in his comment之类的事情:
保持查询不变,另外返回月份名称,让客户在正确的位置显示月份名称。