Cur*_*urt 59
是的,每次使用它们都会更新.
我认为微软总结了一个非常清楚的观点:
视图可以被视为虚拟表或存储查询.
http://msdn.microsoft.com/en-us/library/aa214068%28v=sql.80%29.aspx
视图不会自动缓存.
当您SELECT从一个视图,数据库运行存储在视图的查询得到的结果集在你的语句中使用
您在视图中"看到"的数据实际上并未存储在任何位置,而是从动态表中生成的.
因此,请谨慎运行非常复杂的视图.始终考虑到在访问结果集之前必须执行视图.
Mic*_*ner 13
是的,如果您查询视图,它将反映其所基于的表中已更改的数据。
我读了这些答案,这让我质疑视图是如何工作的,所以我做了一些研究和我发现的支持,但也添加到列出的答案中,所以我想将其添加到锅中。
我使用 *# 来获取参考文献,其定义位于底部。
有不同类型的视图,并且它们有不同类型的行为。有些被存储然后经常更新,而另一些则根本不存储并动态计算。
“视图是一个虚拟表,其内容由查询定义......除非建立索引,否则视图不会作为数据库中存储的数据值集而存在。” *1
“与永久表不同,视图没有其数据的物理表示,除非您在其上创建索引。每当您对非索引视图发出查询时,SQL Server 实际上必须访问基础表。除非另有说明...” *1
因此,非索引视图是在调用时计算的。
“索引视图是一个已经具体化的视图。这意味着视图定义已经被计算并且结果数据就像表一样存储。” *2
由于存储了索引视图,因此它们不太适合经常更新的表,因为它们需要不断更新具体化数据及其索引。
在这两种情况下,索引视图或非索引视图都会在您调用视图时或根据是否已索引进行更改时反映它们引用的表中的更改。
参考
*1 Microsoft SQL Server 2008 T-SQL 编程内部由 Microsoft Press 出版版权所有 2010
*2 https://learn.microsoft.com/en-us/sql/relational-databases/views/views?view=sql-server-ver15
是的,每次都会更新记录。
但是如果你修改表定义。不要忘记refresh查看。
exec sp_refreshview @viewname
不要SELECT *在视图定义中使用,而是使用column name
| 归档时间: |
|
| 查看次数: |
52010 次 |
| 最近记录: |