2010-11-28 66 views
3

我希望能夠根據用戶對參數的選擇動態地命名查詢中的列。我可以使用函數/表達式通過T-SQL中的「As」語句來命名列嗎?

我的想法是,基於用戶的選擇,列將通過列/字段規範之後的「As」命名。

這是我的例子:

Select Distinct 

Case @DateParam 

When 'Created' Then Convert(Varchar, h.wmhd_cre_date, 101) 

When 'Action' Then Convert(Varchar, d.wmdt_date, 101) 

End As CONCATENATE(@DateParm + 'Date'), 

因此,如果用戶選擇了「創建」日期參數,然後列標題會顯示「CreatedDate」。但是如果他們爲「Action」日期選擇參數,那麼該列將被命名爲「ActionDate」。

我試着做類似的事情之前,我開始得到的想法,你不能把表達式後的「作爲」聲明。這是真的,還是有人有任何想法?

回答

2

這是正確的。別名標識符可能不會通過表達式生成。

你可以做這樣的事情,但是:

SELECT DISTINCT 
    CASE WHEN @DateParam = 'Created' THEN CONVERT(varchar, h.wmhd_cre_date, 101) END AS CreatedDate, 
    CASE WHEN @DateParam = 'Action' THEN CONVERT(varchar, h.wmdt_date, 101) END AS ActionDate 

如果你絕對要在你所描述的原始的方式返回列,您將需要使用動態SQL(例如,EXECEXEC sp_executesql

+0

菲爾,謝謝你的提示!我以爲我在過去某個時間點試過了你的建議,但我一定是做錯了。由於我已經有了「案例」結構,因此您的選擇似乎是完美匹配。 – 2010-11-28 00:23:41

+0

很高興這有幫助! – 2010-11-28 00:24:59

1

使用EXEC查詢傳遞爲string.Example:

declare @fnameParam varchar(50) 
set @fnameParam = 'FirstName' 
EXEC 'SELECT FName AS ' + @fnameParam + ' FROM Table1' 
相關問題