2016-05-22 45 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' –

相关问题