2013-07-05 134 views
0

我有一種觀點,我正在使用它將一些相關表組織成一個更易於管理的統計信息列(例如購買/佣金信息)。從視圖插入或更新表

我已經將所有計算結果按照視圖排序,但由於有許多計算列和大量數據(近1百萬條記錄),所以視圖難以執行。

作爲訪問未經修改的視圖的示例返回結果,但僅從該視圖中選擇的一列上執行count(*)會花費很長時間。

我的想法是獲取視圖的數據並將其呈現爲基於視圖列建模的「真實」統計表。

我的問題是,如何從視圖直接插入或更新列到這個新表?

我需要能夠INSERT到新表中,如果一個條目不匹配的PK和更新現有的行,如果它的確因爲視圖數據可能會改變,因爲過程影響其列的值,IE:某人取消訂單以便退款,然後視圖會顯示統計數據,因爲現在有更多的錢退還,我需要在我的存儲表中更新。

另外,由於代碼複雜性和時間限制,我無法在動作點執行此操作,因此會定期調用它。

我希望這是有道理的。

回答

1

據我所知,你是最好的選擇,考慮到SQL Server 2008中是使用Merge Command http://technet.microsoft.com/en-us/library/bb510625.aspx

在那裏你可以寫類似:

MERGE INTO Sales.SalesReason AS Target 
USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion')) 
     AS Source (NewName, NewReasonType) 
ON Target.Name = Source.NewName 
WHEN MATCHED THEN 
    UPDATE SET ReasonType = Source.NewReasonType 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType) 

順便說一句,100萬條記錄不該如果你有一個好的數據庫結構和維護,那就不成問題了。檢查您的索引,統計數據和直方圖,看看它們是否仍然有效。另外運行tunning顧問爲了看看你的索引是否好。