我有一个名为“TableA”的表,其中包含以下记录:
表A:
ID Jan Feb
---- ----- -------
1 '01/12' '04/12'
这里我想从表中选择任何一个列值。但是列名称被分配给变量。我们不知道确切的列名。
例如:
Declare @Month VARCHAR(20)
SET @Month = 'Feb'
Select @Month from TableA
它给出如下输出:
'Feb'
但所需的输出是'04 / 12'
如何获得所需的输出?
答案 0 :(得分:5)
试试这个:
Declare @Month VARCHAR(20)
SET @Month = QUOTENAME('Feb')
exec('Select '+@Month+' from TableA')
答案 1 :(得分:3)
使用UNPIVOT
select months
from TableA
unpivot
(months for m in (Jan, Feb)) pvt
where m=@month
它比动态SQL更安全,因为它不容易受到SQL注入攻击
答案 2 :(得分:2)
使用EXEC或sp_executesql
EXEC:
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' - 列名不能是变量)
答案 3 :(得分:2)
试试这个
Declare @colName VARCHAR(20)
SET @colName = 'Feb'
Exec('select '+ @colName+' from TableA')