【发布时间】:2011-02-08 13:24:37
【问题描述】:
假设我有两张表 Employee 和 Locations。另外,我有一个 viewEmpLocation 视图,它是通过加入 Employee 和 Locations 生成的。
如果我更新视图,原始表中的数据会更新吗?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql views
假设我有两张表 Employee 和 Locations。另外,我有一个 viewEmpLocation 视图,它是通过加入 Employee 和 Locations 生成的。
如果我更新视图,原始表中的数据会更新吗?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql views
见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 CHECK 已指定 OPTION。
【讨论】:
是的。
视图中的数据不存在独立于组成视图的表。视图本质上是一个伪装成表的存储 SELECT 语句。数据存储在原始表中,只有在您想要查看时才“组装”到视图中。如果视图是可更新的(并非所有视图都是),则更新将应用于表数据。
【讨论】:
您可以在视图上使用触发器对实际表执行插入/更新/删除操作。
http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/1/
【讨论】: