我很难理解触发器是如何在mysql中执行的,我的头撞到墙上,因为我似乎无法找到它为什么不工作。
我有下面的触发器
CREATE TRIGGER Insert_Products BEFORE INSERT ON `Products`
FOR EACH ROW BEGIN
DECLARE x_ProductID INT;
SET x_ProductID = NEW.`ProductID`;
SET NEW.`PriceExVAT` = (
SELECT
ROUND(p.`Price` * 100 / (100 + v.`VATPercentage`), 2) as priceexvat
FROM
`Products` p
LEFT JOIN
`VAT` v ON p.`VATID` = v.`VATID`
WHERE p.`ProductID` = x_ProductID); -- also tried inserting NEW.`ProductID` directly into this line
END $$
但是它会在我的行中填充 null
而不是正确的值。但是,将其放入select查询会得到正确的值。即:
SELECT
ROUND(p.`Price` * 100 / (100 + v.`VATPercentage`), 2) as x_value
FROM
`Products` p
LEFT JOIN
`VAT` v ON p.`VATID` = v.`VATID`
WHERE p.`ProductID` = 1;
我试着把它放在一个盒子里 AFTER INSERT
触发器,但这导致了另一个错误。我没看到什么,我该怎么解决?
1条答案
按热度按时间rxztt3cl1#
您不需要查询
product
-当前插入行的值的表:除了autoincrement id之外,还提供了它们NEW
,您可以直接使用它们:你也可以用同样的方法
before update
-扳机。