簡體   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

當我將數據從Basket插入SaleItem時,它運行良好,但觸發僅適用於插入的第一個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

添加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