存储过程出错



我有一个存储过程,可以一次更改图像的标题。。我的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'''

它运行良好。。。我的存储过程有什么问题????

您需要更改

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认为CCD_ 1是列名。但你需要

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

最新更新