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


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

当我将数据从购物篮插入销售项目时,它运行良好,但触发器仅适用于插入的第一个 id。如何使其适用于所有 ID?

编辑!我像这样改变了我的扳机,我想它有点有效。

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

这是对的吗?

不需要每一行或嵌套选择,只需使用插入:)的内部连接

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

添加 对于每一行

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 ;