如何从表中选择动态列值?

the*_*van 1 sql select sql-server-2005 sql-server-2008

我有一个名为"TableA"的表,它有以下记录:

表A:

      ID       Jan       Feb
     ----     -----     -------
      1      '01/12'    '04/12'
Run Code Online (Sandbox Code Playgroud)

在这里,我想从表中选择任何一个列值.但是列名称被分配给变量.我们不知道确切的列名.

例如:

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

    Select @Month from TableA
Run Code Online (Sandbox Code Playgroud)

它给出了如下输出:

    'Feb'
Run Code Online (Sandbox Code Playgroud)

但期望的输出是'04/12'

如何获得所需的输出?

Joe*_*eph 5

试试这个:

Declare @Month VARCHAR(20)
     SET @Month = QUOTENAME('Feb')
 exec('Select '+@Month+' from TableA')    
Run Code Online (Sandbox Code Playgroud)


pod*_*ska 5

使用UNPIVOT

select months
from TableA
unpivot 
(months for m in (Jan, Feb)) pvt
where m=@month
Run Code Online (Sandbox Code Playgroud)

它是比动态 SQL 更安全的解决方案,因为它不易受到 SQL 注入攻击