'='附近的更新过程错误语法

时间:2013-12-23 22:12:02

标签: sql-server stored-procedures sql-server-2012 updates

我很简单想要更新价格,例如这里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中

提前谢谢!

1 个答案:

答案 0 :(得分:4)

你需要在那里添加一些空格。

此:

set @sql = 'update' + @table + 'set' +@field + '=' ...

如果添加以下参数:

  • @table = SomeTable
  • @field = SomeField

将导致这个sql:

updateSomeTablesetSomeField=

当然这不是你想要的。

我假设你在print @sql语句中想要在执行之前打印你的sql语句。它显示了什么?

这是尝试的事情:

set @sql = 'update ' + @table + ' set ' + @field + ' = ' + @field + ' + ' + @increase + ' where ' + @id + ' = ' + @value

我在每个字符串中添加了空格,包括开头和结尾。其中一些空间并不是严格需要的,但它们也不会改变结果。