您是否可以仅向视图添加新数据而无需重新创建整个视图?

时间:2014-12-11 19:14:03

标签: sql sql-server sql-server-2008

如果我的理解不正确,请纠正我,但视图中的数据始终是"最新的"如果查询视图,因为在查询视图时,还会刷新用于创建视图的查询。我创建的特定视图包含数百万条记录,因此我想知道您是否可以保留"历史记录"视图中的数据只会添加新内容吗?

我没有数据库的表写权限。

编辑:实时跟踪数据不断添加到数据库中,视图旨在将大量不同的信息拼接在一起,以便更轻松地进行BI分析。那么,"新数据"我指的是不断添加实时跟踪数据。

编辑:我从效率的角度来写这个(即因为有数百万条记录,在每个查询中重建整个视图需要很长时间)。也许我真正想问的是SQL Server 2008是否会优化"这个查询只添加新的东西,它会重新加载所有数据,还是有一种方法来优化"这是第一种情况吗?

1 个答案:

答案 0 :(得分:2)

视图基本上是带有名称的select语句。查询视图时,会执行“引擎盖下”的查询,这就是获取数据的方式总是“新鲜”。

您的方案的解决方案是创建一个不同的视图(或重新创建现有的视图),您可以在其中过滤历史数据(通过在日期列上添加额外条件,从您的角度排除历史行) 。当然,应保留其他逻辑(表连接,列,计算等)。

您也可以使用现有视图并从中创建一个新视图。新视图的“主体”应该是这样的:

select *
from (
    select * from existentView -- this should contain an AddedDate (or some sort of date)
) e
where e.AddedDate >= getdate()-30