视图是否自动更新

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

这些新记录会出现在 VIEW中吗?

100539 次浏览

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

Yes, they are updated, every time you use them.

我认为微软很清楚地概括了 View 的含义:

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

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

Views are not automatically cached.

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

您在视图中“看到”的数据实际上并不存储在任何地方,而是通过动态表生成的。

因此,要小心运行非常复杂的视图。始终要考虑到在访问结果集之前必须执行视图。

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

只要添加到@Curt 的答案中,如果您对底层表所做的更新是添加或删除数据,那么视图就会自动使用新数据进行更新。 如果添加或删除基础表中的列(基本上是 View 的定义) ,则需要运行 sp_RefreshView存储过程来反映视图中的新架构。

Yes, records will be updated every time.

但如果修改表定义。 别忘了观看 refresh

Exec sp _ resh view@viewname

Don't use SELECT * in view definition, instead use column name

7年后的10月13日11时14分07秒,我听从了内维尔 · 库伊特的建议。

不久前一些愚蠢的采访问到,如果你更新了视图,OG 表中的数据是否会更新。我猜也是。所以面试后我测试了一下。从一些简单的表创建简单的视图。编写了一个简单的 update 语句来更新一个列的值,其中 PKId = whatever,然后针对 View 和 OG 表进行选择,并在两个结果集中更新列。 因此,“是”将通过更新视图来更新原始表内容。

Short Answer

是的,如果您查询一个视图,它将反映它所基于的表中已更改的数据。

长答案

前言

我读了这些答案,它使我质疑如何看的工作,所以我做了一些研究,我发现什么支持,但也添加到列出的答案,所以我想把这个锅。

我的参考资料来源于底部的 * # 定义。

概述

有不同类型的视图,它们有不同类型的行为。一些被存储,然后经常更新,另一些根本不被存储,而是动态计算。

视图的定义

"A view is a virtual table whose contents are defined by a query...Unless indexed, a view does not exist as a stored set of data values in a database." *1

非索引视图

"Unlike permanent tables, a view has no physical representation of its data unless you create an index on it. Whenever you issue a query on a nonindexed view, SQL Server in practice has to access the underlying tables. Unless specified otherwise..." *1

因此,调用时计算非索引视图。

Indexed Views

"An indexed view is a view that has been materialized. This means the view definition has been computed and the resulting data stored just like a table." *2

由于存储索引视图,它们不太适合经常更新的表,因为它们需要不断更新物化数据及其索引。

回答我

在这两种情况下,索引视图或非索引视图都会反映它们引用的表中的更改,无论是在调用视图时,还是在根据是否索引进行更改时。

References

* 2008年内部 Microsoft SQL Server t-SQL 编程出版微软出版社2010年版权所有

* 2 https://learn.microsoft.com/en-us/sql/relational-databases/views/views?view=sql-server-ver15