2017-03-26 40 views
2

我有2個表,ShareButtonSharePageSQL Server:在其他表插入或更新記錄後觸發表的更新列

ShareButton表:

+----+---------------+---------------+ 
| ID | Name   | TotalShare | 
+----+---------------+---------------+ 
| 1 | Facebook  |  0  | 
| 2 | Twitter  |  0  | 
+----+---------------+---------------+ 

SharePage表:

+----+--------------------+-------+---------------+ 
| ID |  URL   | Share | ShareButtonID | 
+----+--------------------+-------+---------------+ 
| 1 | www.abc.xyz/page1 | 3 |  1  | 
| 2 | www.abc.xyz/page1 | 14 |  2  | 
| 3 | www.abc.xyz/page2 | 6 |  1  | 
| 4 | www.abc.xyz/page2 | 10 |  2  | 
+----+--------------------+-------+---------------+ 

插入後或更新SharePage表中的記錄中,ShareButtonTotalShare列被更新

update ShareButton 
set TotalShare = (sum(Share) from SharePage where "ShareButtonID" = ShareButtonID of updated/inserted record)) 
where ID = ShareButtonID of updated/inserted record)` 

感謝 讀!

+4

爲什麼要保存這些信息?爲什麼不在需要時使用聚合查詢進行查詢? – Mureinik

+0

你是過度的事情+爲什麼會觸發?您可以簡單地更新存儲過程中修改'SharePage'表的父表。 – niksofteng

+0

謝謝大家。這是最好和簡單的方法:D –

回答

0

讓我先說我同意穆雷尼克的回答。除非你有一個非常糟糕的表現,使用一個簡單的查詢組獲得總和,我不建議將這個總和保存在ShareButton表中。

如果你真的想要一個觸發器來計算的話,我想做到這一點最簡單的方法是這樣的:

CREATE TRIGGER trSharePage_Changed ON SharePage 
FOR UPDATE, INSERT, DELETE 
AS 

UPDATE buttons 
SET TotalShare = SumOfShares 
FROM ShareButton buttons 
INNER JOIN 
(
    SELECT ShareButtonID, SUM(Share) As SumOfShares 
    FROM SharePage 
    GROUP BY ShareButtonID 
) pages ON buttons.ID = pages.ShareButtonID 

注意,該觸發器將之後的任何插入,更新被解僱或表SharePage delete語句將完成。由於它是一個後觸發器,你根本不需要處理插入和刪除的表。

相關問題