我正在尝试在插入后在桌面上创建一个触发器,它将更新另一个表。
这是我尝试过的代码:
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附近; DECLARE @code AS INTEGER; SELECT @qte = qteInv 来自插入; S'在第4行
答案 0 :(得分: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的触发器实现有限。 SQL Server中没有虚拟表inserted
和deleted
本身。相反,您可以分别使用关键字OLD
和NEW
来访问正在插入或更新的行的旧值和新值。
由于它只归结为一个UPDATE
语句,因此您不再需要使用BEGIN END
阻止。另一个好处 - 你不需要改变DELIMITER
;)