简体   繁体   English

从表插入到另一个表并激活触发器

[英]inserting from a table to another table and activeting trigger

INSERT INTO SaleItem (ProdId, SaleQuantity)
SELECT ProdId, BasketProdQuantity FROM Basket;

CREATE TRIGGER TRG_Stock_Decrease
    ON SaleItem
AFTER INSERT
AS
DECLARE @ProdId INT
DECLARE @SaleQuantity INT
SELECT @ProdId=ProdId,@SaleQuantity=SaleQuantity FROM inserted
UPDATE Product SET ProdStockQuantity=ProdStockQuantity-@SaleQuantity WHERE ProdId=@ProdId
UPDATE Product SET ProdNoOfSold =ProdNoOfSold+@SaleQuantity WHERE ProdId=@ProdId
DELETE FROM Basket Where ProdId = @ProdId

When I insert datas from Basket to SaleItem it works well, but trigger only work for first id that inserted. 当我将数据从Basket插入SaleItem时,它运行良好,但触发仅适用于插入的第一个id。 How can I make it work for all ids? 如何让它适用于所有ID?

EDIT! 编辑! I changed my trigger like this and it kinda worked I guess. 我改变了我的触发器,我觉得它有点工作。

CREATE TRIGGER TRG_Stock_Decrease
    ON SaleItem
AFTER INSERT
AS
BEGIN
UPDATE Product SET ProdStockQuantity = ProdStockQuantity - (Select SaleQuantity From inserted Where Product.ProdId = inserted.ProdId ) Where Product.ProdId IN (Select ProdId From inserted)
UPDATE Product SET ProdNoOfSold =ProdNoOfSold + (Select SaleQuantity From inserted Where Product.ProdId = inserted.ProdId ) Where Product.ProdId IN (Select ProdId From inserted)
DELETE FROM Basket WHERE Basket.ProdId IN (Select ProdId From inserted)
END

Is that correct? 那是对的吗?

No need for each row or nested selects, just inner join with inserted :) 不需要每行或嵌套选择,只需插入内部连接:)

CREATE TRIGGER TRG_Stock_Decrease
    ON SaleItem
AFTER INSERT
AS
    UPDATE P 
    SET ProdStockQuantity=ProdStockQuantity-i.SaleQuantity,
        ProdNoOfSold =ProdNoOfSold+i.SaleQuantity 
    FROM Product P
    INNER JOIN inserted i
        ON P.ProdId=i.ProdId


    DELETE B
    FROM Basket B
    INNER JOIN inserted i
        ON i.ProdId = B.ProdId

add FOR EACH ROW 添加FOR EACH ROW

DROP TRIGGER `TRG_Stock_Decrease`;
DELIMITER //

CREATE TRIGGER TRG_Stock_Decrease
AFTER INSERT ON `TABLE` FOR EACH ROW
BEGIN
  DECLARE @ProdId INT;
  DECLARE @SaleQuantity INT;
  SELECT @ProdId=ProdId,@SaleQuantity=SaleQuantity FROM inserted;
  UPDATE Product SET ProdStockQuantity=ProdStockQuantity-@SaleQuantity WHERE ProdId=@ProdId;
  UPDATE Product SET ProdNoOfSold =ProdNoOfSold+@SaleQuantity WHERE ProdId=@ProdId;
  DELETE FROM Basket Where ProdId = @ProdId;
END; //

DELIMITER ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM