存储过程给我错误

时间:2014-08-26 10:59:57

标签: sql-server

我有一个存储过程来一次更改图像的标题。我的sp如下:

ALTER Proc [dbo].[sp_RenameAll] @Id nvarchar(MAx), @Captionn nvarchar(20) 

as
begin

DECLARE @List VARCHAR(MAX)

SELECT @List = @Id

EXEC(
'update
 tbl_Images set Caption='+@Captionn+'
WHERE Serial  IN (' + @List + ')'
)
end

但是当我用值

执行这个存储过程时
  EXEC  @return_value = [dbo].[sp_RenameAll]
    @Id = N'1,2,3',
    @Captionn = N'Newcaption'

它将我视为无效列' Newcaption', 如果我将输入值更改为

 EXEC   @return_value = [dbo].[sp_RenameAll]
        @Id = N'1,2,3',
        @Captionn = N'''xxxx'''

工作正常......我的存储过程出了什么问题????

1 个答案:

答案 0 :(得分:3)

您需要更改

EXEC(
'update
 tbl_Images set Caption='+@Captionn+'
WHERE Serial  IN (' + @List + ')'
)

EXEC(
'update
 tbl_Images set Caption='''+@Captionn+'''
WHERE Serial  IN (' + @List + ')'
)

在动态SQL中包含字符串值的引号。

您当前的存储过程产生了这个动态查询:

update
tbl_Images set Caption=Newcaption
WHERE Serial  IN (1,2,3)

因此SQL Server认为Newcaption是列名。但是你需要

update
tbl_Images set Caption='Newcaption'
WHERE Serial  IN (1,2,3)