使用动态列名的SQL Server查询

问题描述 投票:0回答:1

我正在尝试对优先级矩阵进行SQL查询。因此,我想动态地传递列名,然后根据也具有动态值的where子句进行过滤。

我已经在Stackoverflow上找到了一些有用的答案,但到目前为止,这些答案只帮助我,现在我有些困惑。谁能看到我要去哪里错了?

查询我有以下问题:

DECLARE @var1 VARCHAR(50)
DECLARE @var2 VARCHAR(50)
DECLARE @sql VARCHAR(255)

SET @var1 = 'partial impact'
SET @var2 = 'single user'
SET @sql = 'select [' + @var1 + '] from [priority matrix] where impact is ['+ @var2 + ']'

EXECUTE(@sql);

查询不是动态的并且可以正常工作:

SELECT [partial impact] 
FROM priorityMatrix 
WHERE impact = 'single user';

运行时出现错误:

Msg 102,第15级,状态1,第1行“单个用户”附近的语法不正确。

到目前为止帮助过的Stackoverflow查询:

SQL Server + Dynamic Query 'Invalid Column Name'How to set variable from a SQL query?

sql sql-server
1个回答
3
投票

IS <> =,因此您需要修复它:

SET @sql = 'select [' + @var1 + '] from [priority matrix] where impact  = ['+ @var2 + ']';

我将使用QUOTENAME()代替手册[]

SET @sql = 'SELECT '+ QUOTENAME(@var1) +' FROM [priority matrix] WHERE impact  = '''+@var2+'''';

Literal字符串用单引号引起来,不需要[]

© www.soinside.com 2019 - 2024. All rights reserved.