代码之家  ›  专栏  ›  技术社区  ›  Kevin Bradshaw

SQL Server外键contsraint阻止插入,其中不存在冲突

  •  0
  • Kevin Bradshaw  · 技术社区  · 7 年前

    我有两个表,我刚刚插入了大约1000000行。我关闭了外键约束,但在尝试使用恢复它们时出错

    ALTER TABLE ForexRebatesNow.dbo.Transactions WITH CHECK CHECK CONSTRAINT ALL
    

    我得到以下错误:

    ALTER TABLE语句与外键约束“FK\U Transactions\U RebateAccounts”冲突。冲突发生在数据库“ForexRebatesNow”、表“dbo.RebateAccounts”和列“Id”中。

    所以我去寻找 RebateAccountId 没有相应的 Id RebateAccounts 桌子

    SELECT Id 
    FROM ForexRebatesNow.dbo.RebateAccounts 
    WHERE Id NOT IN (SELECT RebateAccountId 
                     FROM ForexRebatesNow.dbo.Transactions)
    

    但这返回零行,所以在我看来,冲突并不存在。

    我错过什么了吗?

    编辑

    之间的关系 重新设置帐户 Transactions 是一对多。 重新计算帐户 在Transactions表上是一个可为null的int,而不是all 交易记录 将具有关联的 RebateAccount ,但任何 重新设置帐户 可以有很多 交易记录

    1 回复  |  直到 7 年前
        1
  •  0
  •   Al Imran    7 年前

    由于您没有提供两个表之间的关系,我假设 One-to-Many 之间的关系 RebateAccounts Transactions 桌子如果我是对的,那么我想你是在以相反的方式检查冲突。您的外键在 dbo.Transactions 但您正在用 dbo.RebateAccounts 桌子

    请尝试以下查询以查找冲突。

    SELECT * FROM Transactions WHERE RebateAccountId NOT IN (SELECT Id FROM RebateAccounts)
    

    如果显示任何行,则该行的帐户id不属于任何帐户。这就是你的冲突所在。

    希望有帮助。