Sql server 无法更新存储在变量中的列

Sql server 无法更新存储在变量中的列,sql-server,stored-procedures,Sql Server,Stored Procedures,在执行此代码时,我得到以下结果: declare @columnName varchar(30) set @columnName = 'February' declare @year int set @year = 2016 Declare @abc varchar(max) set @abc = 'Update XYZ'+' '+ @columnName+ '= 562 WHERE Year =' +' '+ convert(varchar(6),@year)+' ' + 'A

在执行此代码时,我得到以下结果:

declare 
@columnName varchar(30)
set @columnName = 'February'

declare
@year int
set @year = 2016

Declare @abc varchar(max)
set @abc = 'Update XYZ'+' '+ @columnName+ '=     562 WHERE Year ='  +' '+ convert(varchar(6),@year)+' '
+ 'AND Category = RESOLUTION'+' ' +'AND Support_KPI = P1_Gold'
print @abc

execute (@abc)
消息207,16级,状态1,第1行 无效的列名“解析”。 消息207,16级,状态1,第1行 无效的列名“P1\u Gold”


是否有任何方法可以消除此错误并正确获取列名???

创建动态sql查询并使用

查询

Update XYZ SET February= 562 
WHERE Year = 2016 AND Category = RESOLUTION AND Support_KPI = P1_Gold
Declare @sql as varchar(max);
Declare @ColumnName varchar(20); 
set @ColumnName = 'January'; -- Change this according to your requirement
select @sql = 'update XYZ set ' + @ColumnName + ' = 876 where Year = 2016;';
execute(@sql);
编辑

如果
varchar
where
条件中键入列,那么我们应该通过将单引号加倍来避免单引号:

查询

Update XYZ SET February= 562 
WHERE Year = 2016 AND Category = RESOLUTION AND Support_KPI = P1_Gold
Declare @sql as varchar(max);
Declare @ColumnName varchar(20); 
set @ColumnName = 'January'; -- Change this according to your requirement
select @sql = 'update XYZ set ' + @ColumnName + ' = 876 where Year = 2016;';
execute(@sql);

在查询中,“Resolution”和“P1_Gold”不是列,而是值。在SQL中,varchar值应该用单引号修饰。 因此,您的查询应该如下所示:

Declare @sql as varchar(max);
Declare @ColumnName varchar(20); 
set @ColumnName = 'January'; -- Change this according to your requirement
select @sql = 'update XYZ set ' + @ColumnName +
              ' = 876 where Year= 2016 and Category = ''Resolution'' and Ticket = ''Met'';';
execute(@sql);

首先,发生了什么错误?第二,你为什么期望这能奏效?您说该列可以包含“一月”到“十二月”,那么您为什么要在其中存储值
876
?@SaurabhMishra:您缺少单引号。如果where条件中也有其他列,那么如何实现这一点?像Update XYZ set@columnName=876,其中Year=2016,Category='Resolution'和Ticket='Met',我无法将另一列的值写在引号中(因为它们是varchar)。有什么可能的解决办法吗?你必须避开单引号