我正在SQL Server 2014中创建一个查询
Declare @ff varchar(33)
set @ff='DAY'+cast((SELECT DAY('2011-04-02')) as varchar(2))
print @ff
update CUSTOMER set DAY1='p' where USERId=12
update CUSTOMER set @ff=''+'f'+'' where USERId=15
print @ff
select * from CUSTOMER
它给出的信息是一行有效但我的表中没有发生变化。请帮我解决这个问题
答案 0 :(得分:0)
这是SQL Server吗?更新将更新变量的内容,而不是表中的列。您不能使用变量来引用列的名称。如果您需要进行类似的动态更新,则必须使用带有EXEC或sp_executesql的动态SQL。
答案 1 :(得分:0)
您不能以您的方式使用变量作为列名,因此第二次更新需要使用动态sql语句完成,您可以将变量注入查询字符串,如下所示:
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'update CUSTOMER set ' + @ff + ' = ''f'' where USERId=15'
EXEC sp_executesql @sql
将变量@ff
定义为:
Declare @ff nvarchar(33)
set @ff='DAY'+cast((SELECT DAY('2011-04-02')) as varchar(2))
这会将列DAY2
更新为f
userid = 15
然而,你可以摆脱@ff
变量并直接构建查询字符串:
SET @SQL = CONCAT(N'update CUSTOMER set DAY', DAY('2011-04-02'), ' = ''f'' where USERId=15')