繁体   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