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)。有什么可能的解决办法吗?你必须避开单引号