2010-10-05 74 views
12

有关更新数据库视图的问题:我在读通过关于这个问题的一些MSDN文档,我遇到下列限制:更新视图 - SQL Server 2008中

任何修改,包括UPDATE,INSERT,和DELETE语句必须仅引用来自一个基表的列。

我只是想知道我理解的限制。我想在我的几个媒体评论项目中使用观点。关系数据遍布表中,但是一个视图似乎是能够将我需要从多个表(其中一些通过外键链接)需要的数据合并到一个集中位置的最佳方式。由于列将来自各种表格,这是否意味着我不能运行一个覆盖INSERT或UPDATE来在所有列中保留更改?

回答

11

是的,这是什么意思。我认为通过视图更新没有什么优势,因为无论如何您都必须知道涉及的基表是什么。

+0

好吧,如果我想编辑的信息更容易来填充视图的值表单字段并将其保存回以同样的方式。 – 2010-10-06 16:37:33

+0

只要视图包含从基础表键列,或以其它方式允许SQL Server唯一地标识行的表中,通过一个视图可以简化事情直接更新现在 - 尤其是在等,其中的图被映射到一个的情况表单或数据网格。这首先关注我,但由于用户仍然需要更新表的权利,所以没有增加安全风险。 – SqlRyan 2011-07-25 20:29:52

+2

但是,如果更新的字段来自不同的基础表,它将不起作用。这就是为什么从视图更新没有用。 – HLGEM 2011-07-25 20:47:42

12

您可以使用INSTEAD OF触发器在视图上,让您的应用程序只涉及该视图,而不是基表视图引用的集合。

下面是一个例子:Designing INSTEAD OF Triggers