mysql触发器插入null而不是值

jogvjijk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(423)

我很难理解触发器是如何在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 触发器,但这导致了另一个错误。我没看到什么,我该怎么解决?

rxztt3cl

rxztt3cl1#

您不需要查询 product -当前插入行的值的表:除了autoincrement id之外,还提供了它们 NEW ,您可以直接使用它们:

SET NEW.`PriceExVAT` = ( 
    SELECT ROUND(NEW.`Price` * 100 / (100 + v.`VATPercentage`), 2) as priceexvat
    FROM `VAT` v 
    WHERE NEW.`VATID` = v.`VATID`
  )

你也可以用同样的方法 before update -扳机。

相关问题