将列名发送到procedure并将值减1

时间:2013-02-21 20:47:16

标签: sql-server-2008 stored-procedures

我需要制定一个程序,以便在每次执行时将某个项目的库存减少一个。问题来自于想要以旧方式去做,似乎无法想到任何其他方法。这是我现在写的代码:

CREATE PROCEDURE REDUCESTOCK
@cod_ag numeric(3), //Agency code
@tipo_stock char(1), //Stock to be altered (Merchandising or Artifact)
@producto varchar(5) //Name of the product (Column name)
AS
BEGIN
IF(@tipo_stock='A')
    UPDATE JS_ELECTRODOMESTICO
    SET @producto=@producto-1
    WHERE cod_ag=@cod_ag
ELSE
    PRINT 'error'
END
GO

我收到错误,当然,我无法将varchar转换为int。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您是否尝试在'producto'参数中指定列名?如果是这样,您将需要构建一个“动态SQL”字符串并执行它......

IF(@tipo_stock='A')
  declare @sqlcmd varchar(max);
  set @sqlcmd = 'UPDATE JS_ELECTRODOMESTICO SET '
    +@producto+'='+@producto+'-1 WHERE cod_ag='+@cod_ag;
  exec (@sqlcmd);