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