0
A
回答
1
要更新的每個其他表中的列的一個時間總和列被改變?然後觸發器可以爲您的目的服務。
Create Trigger For Insert, Update, Delete
On OtherTable
As
Update SumTable Set
SumColumn =
(Select Sum(Column)
From OtherTable
Where something = s.Something)
From SumTable s
Where Something In
(Select Distinct something From inserted
Union
Select Distinct Something From deleted)
或者,你可以將代碼從一個插入或更新的代碼刪除通過編寫單獨的觸發器被分開,或:
Create Trigger For Insert, Update, Delete
On OtherTable
As
If Exists(Select * From inserted) And Update(Column)
Update SumTable Set
SumColumn =
(Select Sum(Column)
From OtherTable
Where something = s.Something)
From SumTable
Where Something In
(Select Distinct Something
From Inserted)
Else If Exists(Select * From deleted)
Update SumTable Set
SumColumn =
(Select Sum(Column)
From OtherTable
Where something = s.Something)
From SumTable
Where Something In
(Select Distinct Something
From deleted)
2
你可能想看看使用視圖,而不是對這樣的表,像下面可能會有幫助。
Select table.*, sum(otherTable.column)
from table
inner join otherTable on table.something = otherTable.something
2
聽起來就像你想添加一個觸發器。
1
正如查爾斯說,觸發效果很好在這情況。如果來自其他表格的行總數經常變化,我不確定觸發器是否會導致性能問題。還有兩種方法:
視圖 - 視圖本質上是一個保存的查詢,並且您就像查詢表一樣查詢它。如果彙總數據僅適用於報告類型的內容,則最好從主表中刪除彙總列並使用視圖進行報告
存儲過程 - 如果您希望將列保留在主表中,您可以定期運行一個存儲過程,以保持所有行的總額信息都是最新的。
+0
我特意爲upvoted關於視圖的註釋:不要使用觸發器。 –
0
我會比較視圖的想法和觸發想法之間的性能之前決定使用。針對您期望視圖的完整數據集執行此操作,而不僅僅是一小組測試數據。如果可能,請確保爲視圖編制索引。
相關問題
- 1. SQL創建表[默認]
- 2. 與SQL查詢和默認位創建一個訪問表值
- 3. SQL查詢默認
- 4. SQL從表中查詢默認值
- 5. 創建Django的表單字段默認爲空查詢集
- 6. 爲SQL查詢設置默認模式
- 7. SQL查詢創建跨列
- 8. SQL查詢在同一查詢中創建和更新列表
- 9. 在該查詢SQL查詢創建列
- 10. SQL查詢以獲取特定列的默認值爲0
- 11. 如何確保爲SQL Server中的每個表默認創建2列
- 12. 從SQL中的查詢創建表
- 13. 在Oracle SQL中創建默認約束
- 14. 使用默認的sql表來查找表中存在的列
- 15. SQL Server 2005使用列創建表默認值範圍
- 16. 創建一個名爲列默認CREATE TABLE語句在ANSI SQL
- 17. 從下拉列表中的SQL查詢中選擇的默認選項
- 18. 用默認值(表達式)將MYSQL表創建爲列
- 19. 以SelectList默認值顯示SQL查詢爲HTML表格
- 20. SQL創建表並從中查詢
- 21. SQL Server:通過查詢查找列的默認值
- 22. php幫助 - 爲html表上的特定列創建默認值
- 23. 在SQL中創建查詢
- 24. 創建SQL查詢
- 25. 創建SQL查詢
- 26. 創建SQL查詢
- 27. 爲SQL查詢中的所有列創建PHP變量
- 28. 創建表並將查詢作爲默認值分配給某個字段
- 29. 訪問/ SQL查詢JOIN創建的表
- 30. SQL創建外鍵的表查詢
嘿查爾斯感謝您的答案,但我不知道我明白你在做什麼之後在哪裏。 凡東西 (SELECT DISTINCT東西從插入 聯盟 SELECT DISTINCT一些東西刪除) – Shino88
由於我使用的是單觸發兩個更新/插入和刪除,where子句是限制的更新,只有那些行,其中在正在插入,更新或刪除的行中存在something列的值...這會阻止觸發器更新SumTable中每行的SumColumn,並且只更新需要更新的行(子節點行已被插入,更新或刪除) - 我已經添加了separte代碼塊來單獨處理這兩個場景 –