0

我试图在插入后在表上创建一个触发器,这将更新另一个表。

这是我尝试过的代码:

delimiter |
CREATE TRIGGER augmenter_quantite_article AFTER INSERT
ON LigneInterventaire
FOR EACH ROW BEGIN
DECLARE @qte AS INTEGER;
DECLARE @code AS INTEGER;
SELECT @qte = qteInv FROM INSERTED;
SELECT @code = codeArt FROM INSERTED;
UPDATE Article SET qteArt = qteArt + @qte WHERE codeArt = @code;
END;

|

delimiter ;

但我收到此错误消息:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '@qte AS INTEGER; 附近使用的正确语法;将@code 声明为整数;从插入中选择@qte = qteInv;第 4 行的 S'

4

1 回答 1

1

尝试

CREATE TRIGGER augmenter_quantite_article 
AFTER INSERT ON LigneInterventaire
FOR EACH ROW 
  UPDATE Article 
     SET qteArt = qteArt + NEW.qteInv
   WHERE codeArt = NEW.codeArt;

这是SQLFiddle演示。

MySql 的触发器实现有些有限。inserted与SQL Server 一样,没有虚拟表deleted本身。OLD相反,您可以使用关键字和NEW分别访问正在插入或更新的行的旧值和新值。

由于它归结为只有一个UPDATE语句,您不再需要使用BEGIN END块。另一个优点 - 你也不需要改变DELIMITER;)

于 2013-06-03T19:48:35.033 回答