2013-07-05 86 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顾问为了看看你的索引是否好。