我需要制定一个程序,以便在每次执行时将某个项目的库存减少一个。问题来自于想要以旧方式去做,似乎无法想到任何其他方法。这是我现在写的代码:
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。
任何帮助都将不胜感激。
答案 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);