1

我有一个名为“TableA”的表,其中包含以下记录:

表A:

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

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

例如:

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

    Select @Month from TableA

它给出的输出如下:

    'Feb'

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

如何获得所需的输出?

4

4 回答 4

5

试试这个:

Declare @Month VARCHAR(20)
     SET @Month = QUOTENAME('Feb')
 exec('Select '+@Month+' from TableA')    
于 2012-07-27T11:42:10.383 回答
5

采用UNPIVOT

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

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

于 2012-07-27T11:44:17.833 回答
2

使用 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' - 列名不能是变量)

于 2012-07-27T11:41:55.007 回答
2

试试这个

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

Exec('select '+ @colName+' from TableA')
于 2012-07-27T11:42:04.217 回答