簡體   English   中英

如何從表中選擇動態列值?

[英]How to select dynamic column value from a table?

我有一個名為“ TableA”的表,該表具有以下記錄:

表A:

      ID       Jan       Feb
     ----     -----     -------
      1      '01/12'    '04/12'

在這里,我想從表中選擇任一列值。 但是列名稱已分配給變量。 我們不知道確切的列名。

例如:

    Declare @Month VARCHAR(20)
    SET @Month = 'Feb'

    Select @Month from TableA

它給出的輸出如下:

    'Feb'

但是所需的輸出是'04 / 12'

如何獲得所需的輸出?

嘗試這個:

Declare @Month VARCHAR(20)
     SET @Month = QUOTENAME('Feb')
 exec('Select '+@Month+' from TableA')    

使用UNPIVOT

select months
from TableA
unpivot 
(months for m in (Jan, Feb)) pvt
where m=@month

它比動態SQL安全得多,因為它不容易受到SQL注入攻擊的攻擊

使用EXEC或sp_executesql

執行:

Declare @Month NVARCHAR(20)
SET @Month = 'Feb'
DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'Select ' + @Month + ' from TableA'
EXEC(@SQL)

最好使用sp_executesql,因為它將參數化變量:

 DECLARE @SQL NVARCHAR(4000) SET @SQL = 'Select @Month from TableA' EXEC sp_executesql @SQL, N'@Month NVARCHAR(20)', @Month = 'Feb' 

(這只是返回常量'Feb'-列名不能是變量)

嘗試這個

Declare @colName VARCHAR(20)
SET @colName = 'Feb'

Exec('select '+ @colName+' from TableA')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM