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

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

推荐答案

Short Answer

是的,如果查询视图,它将在它所基于的表中反映更改的数据.

Long Answer

Preface

我读了这些答案,它让我质疑视图是如何工作的,所以我做了一些研究,找到了支持的内容,但也添加到了列出的答案中,所以我想将其添加到锅中.

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

Overview

有不同类型的观点,他们有不同类型的行为.有些是存储的,然后经常更新,而另一些则根本不存储,而是动态计算.

Definition of a View

"视图是一个虚拟表,其内容由查询定义……除非已编制索引,否则视图在数据库中不作为存储的数据值集存在."*1.

无索引视图

"与永久表不同,视图没有数据的物理表示形式,除非您在其上创建索引.每当您对无索引视图发出查询时,SQL Server实际上必须访问基础表.除非另有规定……"*1.

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

视图索引

"索引视图是已具体化的视图.这意味着已计算视图定义,并将结果数据像表一样存储."*2.

在存储索引视图时,它们不太适合经常更新的表,因为它们需要不断更新materialized 数据及其索引.

Answer

在这两种情况下,索引视图或非索引视图都反映了它们引用的表中的更改,这些更改是在调用视图时进行的,或者是在基于是否索引进行更改时进行的.

工具书类

*1.Microsoft SQL Server 2008内部T-SQL编程由Microsoft出版社出版版权所有2010

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

Sql相关问答推荐

基于列对多行求和的查询

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

在Golang中管理数据库事务的简洁方法

返回包含列和包含其他列的列表的自定义查询

从日期开始向前填充重复项

使用SQL创建列出两个时间戳之间小时数的列

我可以在SQL的IN子句中使用比子查询包含的值更少的值吗?

使用generate_series()时,LEFT联接缺少日期/间隔

缺少日期标识

如何使子查询在UPDATE语句期间获得最新更新

如何在T-SQL中编写row_number的WHERE子句?

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

匹配 H[0-9][0-9] 但不匹配除字母 H 之外的任何字母

PostgreSQL 中将数据从 JSONB 类型转换为 Array 类型

JSON对象查询SQL服务器

SQL:无重复项的两个聚合函数

SQL 按 id 运行总计并受条件限制(在窗口上)

使用 GROUP BY 时如何创建其他组?

如何仅在满足条件时才按顺序在 SQL 中计数?