我是SQL Server的初学者
我写了这个查询:
DECLARE @sql nvarchar(1000) = 'UPDATE Work
SET [Name] = Programmer, [ImageAddress] = pic.jpg
WHERE Id = 2'
SELECT @sql
EXEC Sp_executesql @sql
但我收到此错误
无效的列名称'Programmer'。
为什么我会收到此错误?
感谢您的帮助
答案 0 :(得分:1)
您正在处理字符串中的SQL。引用字符串成为一项挑战。执行查询时,Programmer
需要单引号。要实现这一点,您需要在字符串中使用 double 单引号:
DECLARE @sql nvarchar(1000)='
UPDATE Work
SET [Name] = ''Programmer'', [ImageAddress] = ''pic.jpg'' WHERE Id=2'
select @sql
EXEC Sp_executesql @sql;
因为您足够明智地使用sp_executesql
,所以您应该了解参数。您可以将查询编写为:
DECLARE @sql nvarchar(1000)='
UPDATE Work
SET [Name] = @Programmer, [ImageAddress] = @imageaddress WHERE Id=2'
select @sql
EXEC Sp_executesql @sql, N'@programmer nvarchar(255), @imageaddress nvarchar(255)',
@programmer = N'Programmer', @imageaddress = N'pic.jpg';
除了引用之外,这还有几个优点。它在SQL注入方面更安全,它允许SQL Server在多次调用查询时缓存执行计划。
答案 1 :(得分:0)
试试这个:
您需要使用''
(字符串双引号)内部动态SQL
DECLARE @sql nvarchar(1000)='
UPDATE Work
SET [Name] = ''Programmer'',[ImageAddress] =''pic.jpg'' WHERE Id=2'
select @sql
EXEC Sp_executesql @sql