【问题标题】:is it possible to delete from 2 or more sql tables using a sql datasource?是否可以使用 sql 数据源从 2 个或更多 sql 表中删除?
【发布时间】:2009-04-06 13:51:33
【问题描述】:

当我从我的数据网格中删除一行时,我收到一个 FK 错误,因为我看不到从 FK 是主表的其他表中删除的方法?

我收到此错误:

DELETE 语句与 REFERENCE 约束“FK_Availability_Fixture”冲突。冲突发生在数据库“Rugby”、表“dbo.Availability”、列“FixtureId”中。 该语句已终止。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:DELETE 语句与 REFERENCE 约束“FK_Availability_Fixture”冲突。冲突发生在数据库“Rugby”、表“dbo.Availability”、列“FixtureId”中。 该语句已终止。

【问题讨论】:

  • 有人可以更改问题的错字吗? "其他表" => "其他表"

标签: asp.net sql


【解决方案1】:

您可以将 FK 关系定义为删除时级联。这将导致删除语句级联(删除)所有子表。

MSDN查看页面

【讨论】:

    【解决方案2】:

    这是维护数据完整性的“应该发生的”:另一个表中的一行引用了您尝试删除的行。

    如果您的删除成功,则其他表的引用将毫无意义。

    解决此问题的唯一方法是先删除引用行(这可能意味着删除其他也引用您要删除的行的行。)

    这表明:a) 您不应该删除这一行,b) 或者您需要先删除其他(可能还有很多其他)行,或者 c) 您的表格设计不正确供您尝试使用数据库。

    【讨论】:

      【解决方案3】:

      您的数据库说:“不允许Availability.FixtureID 列引用不存在的值。”因此,当 Availability 表中的一行引用它时,从 Fixture 表中删除一行将违反此规则。

      所以你有两个选择,任何一个都同样有效,但第一个可能是你要找的:

      1. 找到名为FK_Availability_Fixture的外键关系,然后在FixtureId列上启用级联删除。
      2. 手动删除Availability 表中的依赖行,或更新相关特定行的FixtureID,使其引用不同的FixtureID 值。

      【讨论】:

        猜你喜欢
        • 2013-07-06
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 2014-07-28
        • 2013-11-08
        • 2011-03-09
        • 1970-01-01
        相关资源
        最近更新 更多