代码之家  ›  专栏  ›  技术社区  ›  cbp

SQL Server:对具有联接的可更新视图执行删除

  •  0
  • cbp  · 技术社区  · 15 年前

    在SQL中,只要视图只从一个表中选择数据,就可以对视图运行插入和更新。但是,删除似乎不太管用。有人能帮忙吗?

    以这个视图为例:

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

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

    视图或函数“v_myupdatable leview”不可更新,因为修改会影响多个基表。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Khalid Abuhakmeh    15 年前

    我只创建一个存储过程,从两个表中删除数据。我知道它不漂亮,但它可以工作,也可以进行逻辑删除,在这里您更新一个列以“删除”。

        2
  •  2
  •   OMG Ponies    15 年前

    引用:

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

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

    Data Modification Rules - Creating a Partitioned View