2016-05-22 48 views
4
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 [email protected] WHERE [email protected] 
UPDATE Product SET ProdNoOfSold [email protected] WHERE [email protected] 
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 

這是正確的嗎?

+0

SQL Server Management Studio中2012,如果你問。 –

+0

正確,但被許多'SELECT FROM inserted'淹沒:) – gofr1

回答

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 
+0

非常感謝!我總是使用單行觸發器,併爲我改變了很多東西。 :) –

+1

好極了,如果有幫助!如果您保證用戶只插入/更新一行(在很多地方使用),但是如果插入/更新多行是使用此數據的最佳方式,那麼單行是很好的 - 可以將它與您所需的:) – gofr1

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 [email protected] WHERE [email protected]; 
    UPDATE Product SET ProdNoOfSold [email protected] WHERE [email protected]; 
    DELETE FROM Basket Where ProdId = @ProdId; 
END; // 

DELIMITER ; 
+0

問題標記爲'SQL Server'而不是'Mysql' –

相關問題