2011-10-13 102 views
31

如果我JOINCROSS APPLY两个表并创建一个VIEW,当我更新两个表中的任何一个或我添加记录到任何一个时,该视图会自动更新?是自动更新

这些新记录会出现在VIEW

+6

是的,他们会 - 但不是找出去尝试的最快方法? –

+0

不,最快的方法是谷歌搜索:) –

回答

34

是的,它们会在每次使用时更新。

我认为微软总结了一个视图是什么很清楚:

视图可以作为一个虚拟表或存储查询被认为。

http://msdn.microsoft.com/en-us/library/aa214068%28v=sql.80%29.aspx

视图不会自动缓存。

当你SELECT从视图,数据库运行存储在视图的查询得到的结果集的语句

在一个视图中,数据的“看”的使用,实际上并没有存储在任何地方,并从飞行表中生成。

由于这是非常复杂的小心运行视图。始终考虑到在访问结果集之前必须执行视图。

+0

+1:或者是一个内联扩展的宏,它构成了包含代码的一部分,而不是预先计算的结果集。 – MatBailie

+0

如果视图中的数据没有存储到任何位置,那么当您向视图添加行时INSERT INTO dbo.MyView(myCol)VALUES('test')' - 存储在哪里? – BornToCode

+1

您不能将记录插入视图 – Curt

4

是的,视图是对基础表/视图的SELECT查询。如果您修改了基础表中的数据,并且该范围包含在视图定义中,那么您将看到修改后的数据。

6

一个视图基本上是一个存储的查询,它不包含任何数据,所以不会,当它构建的表是不会更新的。但是,只要引用视图,它将基于的查询将运行,以便您可以看到对基表进行的更改。

0

只需添加到@ Curt's Answer,如果您对基础表进行的更新是添加或删除数据,则该视图会自动更新新数据。 如果您添加或删除表格(基本上是视图的定义)的列,则需要运行sp_RefreshView存储过程以反映视图中的新模式。

0

是的,记录每次都会更新。

但是,如果您修改表定义。 别忘了refresh查看。

EXEC sp_refreshview @viewname

不要在视图定义使用SELECT *,而是使用column name