2010-08-02 189 views
0

我有兩個表的SQL Server 2008數據庫。第一個表稱爲貨架。第二張表稱爲產品。每個產品都屬於一個貨架。在此基礎上,我有一個表結構,看起來像:創建更新觸發器

**Product** 
ID (int) 
ShelfID (int) 
Description (text) 

**Shelf** 
ID (int) 
AisleNumber (int) 
TotalProducts (int) 

當產品被插入或刪除,我需要更新相關的架子「TotalProducts」值。爲了嘗試這個,我使用了一個觸發器。但是,我不完全瞭解觸發器的工作原理。有人可以告訴我如何做到這一點?

謝謝

+1

你也可以請參閱http://計算器.com/questions/3388283 /自動設置字段值在SQL中的一個非常類似的問題。 – 2010-08-02 14:41:49

回答

2

當您插入或更新的產品,你需要找出什麼ShelfIDs的影響。這是下面的INSERTED參考。然後,您需要計算這些ShelfID的產品數(JOIN/COUNT位)並更新Shelf表。

您還需要東西DELETE太:剛纔提到的特殊DELETED

這將運行作爲插件的一部分/ DELETE語句

CREATE TRIGGER TRG_Product_I On product FOR INSERT 
AS 
SET NOCOUNT ON 

UPDATE 
    S 
SET 
    TotalProducts = foo.NewTotalProducts 
FROM 
    Shelf S 
    JOIN 
    (SELECT 
     ShelfID, COUNT(*) AS NewTotalProducts 
    FROM 
     INSERTED I 
     JOIN 
     product P ON I.ShelfID = P.ShelfID 
    GROUP BY 
     ShelfID 
    ) foo ON S.ShelfID = foo.ShelfID