视图是否自动更新

时间:2011-10-13 14:05:57

标签: sql view

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

这些新记录会显示在VIEW吗?

6 个答案:

答案 0 :(得分:51)

是的,每次使用时都会更新。

我认为微软总结了一个非常清晰的观点:

  

视图可以被视为虚拟表或存储查询。

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

视图不会自动缓存。

当您从视图中SELECT时,数据库必须运行存储在视图中的查询以获取要在语句中使用的结果集

您在视图中“看到”的数据实际上并未存储在任何位置,并且是动态生成的。

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

答案 1 :(得分:10)

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

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

但是如果修改表定义。 不要忘记refresh查看。

  

exec sp_refreshview @viewname

请勿在视图定义中使用SELECT *,而是使用column name

答案 4 :(得分:2)

Just adding on to @Curt's Answer, if the update you made to underlying tables is adding or deleting Data, then the view is auto updated with the new data. If you add or delete the columns form the underlying tables(basically the definition of the View ), then you need to run sp_RefreshView stored procedure to reflect the new schema in your view.

答案 5 :(得分:-1)

Phtttt值得花7年后的钱去买一本Neville Kuyt在2011年10月13日14:07推荐的东西。

一些愚蠢的采访片刻之前询问,如果更新视图,OG表中的数据是否会更新。我想是的。所以面试后我进行了测试。从一些简单表创建了简单视图。编写了一条简单的update语句来更新PKId =任意值的列的值,然后针对View和OG表进行选择,并且在两个结果集中更新了列。 因此,是的,您将通过更新视图来更新原始表内容。