我很简单想要更新价格,例如这里3,但这是一个存储过程。
我已经用普通语法尝试了它:
update tblPrijs
set PrijsVerkoop = PrijsVerkoop + 1
where PrijsId = '6';
这很好。
但我的存储过程总是返回:
updatetblPrijssetPrijsVerkoop=PrijsVerkoop+3.00wherePrijsId=11
Msg 102,Level 15,State 1,Line 1
'='附近的语法不正确。
我不知道我做错了什么..
存储过程:
alter PROCEDURE updatePrice
-- Add the parameters for the stored procedure here
@table nvarchar(50),
@field nvarchar(50),
@increase nvarchar(50),
@id nvarchar(50),
@value nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @sql as nvarchar(400);
-- Insert statements for procedure here
set @sql = 'update' + @table + 'set' + @field + '=' + @field + '+' + @increase +
'where' + @id + '=' + @value
print @sql /* drukt het resultaat van concat af */
exec(@sql)
END
GO
这是我在查询中写的:
updatePrice'tblPrijs', 'PrijsVerkoop','3.00', 'PrijsId','11'
抱歉田地和桌子的荷兰名字......
我认为这是一个小而明显的错误,但我只是看不到它..
这是在SQL Server 2012中
提前谢谢!
答案 0 :(得分:4)
你需要在那里添加一些空格。
此:
set @sql = 'update' + @table + 'set' +@field + '=' ...
如果添加以下参数:
将导致这个sql:
updateSomeTablesetSomeField=
当然这不是你想要的。
我假设你在print @sql
语句中想要在执行之前打印你的sql语句。它显示了什么?
这是尝试的事情:
set @sql = 'update ' + @table + ' set ' + @field + ' = ' + @field + ' + ' + @increase + ' where ' + @id + ' = ' + @value
我在每个字符串中添加了空格,包括开头和结尾。其中一些空间并不是严格需要的,但它们也不会改变结果。