【问题标题】:Updatable views - SQL Server 2008可更新视图 - SQL Server 2008
【发布时间】:2012-12-12 00:31:15
【问题描述】:

关于可更新数据库视图的问题:我正在阅读有关该主题的一些 MSDN 文档,但遇到以下限制:

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

我只是想确定我了解限制。我想在我的几个媒体评论项目中使用视图。关系数据分布在整个表中,但视图似乎是将我需要的来自多个表(其中一些通过外键链接)的数据整合到一个集中位置的最佳方式。由于这些列将来自各种表,这是否意味着我不能运行一揽子 INSERT 或 UPDATE 来持久保存所有列中的更改?

【问题讨论】:

    标签: sql-server-2008 views


    【解决方案1】:

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

    这是一个例子:Designing INSTEAD OF Triggers

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 好吧,如果我想编辑信息,用视图的值填充表单字段并以相同的方式保存它们会更容易。
      • 只要视图包含基础表中的键列,或者允许 SQL Server 唯一标识表中的一行,现在通过视图直接更新可以简化事情 - 特别是在像这样的情况下视图映射到表单或数据网格的位置。起初这让我有点担心,但由于用户仍然需要更新表格的权限,因此不会增加安全风险。
      • 但是如果更新的字段来自不同的基础表,它将不起作用。这就是为什么从视图更新没有用的原因。
      • SQLRyan 有它的位置。许多清单是作为临时项目工作流程的一部分创建的,永远不会再次使用。将视图暴露给 MS Access 或其他开箱即用的网格编辑是一个完美的 5 分钟解决方案,只要您记得保持大多数列不可编辑。为了回答 HLGEM,这些复选框中的大多数工作流练习需要来自许多表的上下文信息,但只需要更新到一个。
      • @Adamantish,如果您错过了那部分,OP 希望能够在一次更新中更新所有列,这对于来自多个表的视图是不可能的。
      猜你喜欢
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2013-06-12
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多