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
当我将数据从Basket插入SaleItem时,它运行良好,但触发仅适用于插入的第一个id。如何让它适用于所有ID?
EDIT! 我像这样改变了我的触发器,我猜它有点工作。
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
这是对的吗?
答案 0 :(得分:3)
不需要每行或嵌套选择,只需要插入内部连接:)
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
答案 1 :(得分:0)
添加 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 ;