Sql Server:使用连接对可更新视图执行删除

时间:2009-12-23 00:48:56

标签: sql sql-server views

在SQL中,只要视图仅从一个表中选择数据,就可以对视图运行插入和更新。但是,删除似乎并不是那么好用。任何人都可以帮忙吗?

以此视图为例:

CREATE VIEW v_MyUpdatableView
AS
    SELECT x.* FROM MyPrimaryTable x
    LEFT OUTER JOIN AnotherTable y ON y.MyPrimaryTableId = x.Id

我可以对这个视图运行更新和插入,他们很高兴地传递给MyPrimaryTable。 但是,如果我运行删除,则会收到以下异常:

  

视图或函数'v_MyUpdatableView'不可更新,因为修改会影响多个基表。

2 个答案:

答案 0 :(得分:2)

引用:

  

DELETE语句通过分区视图删除一个或多个成员表中的数据。 DELETE语句必须遵守此规则:

     
      
  • 如果存在具有相同视图或任何成员表的自联接,则不允许使用DELETE语句。
  •   

Data Modification Rules - Creating a Partitioned View

答案 1 :(得分:1)

我只想创建一个存储过程来删除两个表中的数据。我知道它不漂亮,但它可以工作或进行逻辑删除,您可以将列更新为“已删除”。