如果我更新视图,我的原始表将更新

Vai*_*ain 31 sql t-sql sql-server sql-server-2005 views

假设我有两个表Employee和Locations.另外,我有一个视图viewEmpLocation,它是通过加入Employee和Locations来实现的.

如果我更新视图,原始表中的数据是否会更新?

KM.*_*KM. 24

请参阅在Microsoft SQL Server中使用视图

通过视图修改数据(即使用INSERT或UPDATE语句)时,根据视图类型存在某些限制.访问多个表的视图只能修改视图中的一个表.可能无法更新使用函数,指定DISTINCT或使用GROUP BY子句的视图.此外,以下类型的视图禁止插入数据:

* views having columns with derived (i.e., computed) data in the SELECT-list  
* views that do not contain all columns defined as NOT NULL from the tables from which they were defined
Run Code Online (Sandbox Code Playgroud)

除非已指定WITH CHECK OPTION,否则还可以通过视图插入或更新数据,以便不再通过该视图访问数据.


Lar*_*tig 19

是.

视图中的"数据"不存在独立于构成视图的表的存在.该视图本质上是一个存储的SELECT语句,伪装成一个表.数据存储在原始表中,只有在您想要查看时才"组装"到视图中.如果视图是可更新的(并非所有视图都是),则更新将应用于表数据.

  • 视图上没有索引,只有基础表上有索引。当您从视图请求数据时,DBMS 使用索引来组合不同表中的行。(这忽略了一种相当新的视图,即“物化视图”,数据库在其中存储数据的“影子”副本,从而有效地为您预先计算视图)。 (3认同)

Kyl*_*J V 5

您可以在视图上使用触发器对实际表进行插入/更新/删除。

http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/1/

  • 该问题明确询问更新视图的效果。提出替代方案固然很棒,但它并不能回答问题。 (7认同)
  • 我很感激对我的答案的反馈,但如果是负面的,为什么没有人发表评论?如有错误还望指正。 (5认同)