我有一个存储过程来一次更改图像的标题。我的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'''
工作正常......我的存储过程出了什么问题????
答案 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)