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

时间:2010-04-15 19:41:40

标签: sql sql-server sql-server-2005 tsql views

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

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

3 个答案:

答案 0 :(得分:24)

请参阅Using Views in 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
     

也可以插入或   通过视图更新数据   数据不再可通过   那视图,除非WITH WITH CHECK   OPTION已被指定。

答案 1 :(得分:18)

是。

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

答案 2 :(得分:4)

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

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