在字符串查询中获取错误

时间:2014-11-29 13:47:54

标签: sql sql-server stored-procedures

我是SQL Server的初学者

我写了这个查询:

DECLARE @sql nvarchar(1000) = 'UPDATE Work
                               SET [Name] = Programmer, [ImageAddress] = pic.jpg 
                               WHERE Id = 2'

SELECT @sql
EXEC Sp_executesql @sql

但我收到此错误

  

无效的列名称'Programmer'。

为什么我会收到此错误?

感谢您的帮助

2 个答案:

答案 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