删除记录时如何暂时关闭此错误?

时间:2011-10-26 15:41:58

标签: sql

我有一个向数据库添加一些数据的进程。有些列是键。我需要能够在进程运行后删除该行(因此我可以再次运行它)。但是我得到以下错误:

  

消息547,级别16,状态0,行1 DELETE语句冲突   使用REFERENCE约束“FK_InviteConfiguration_Invite”。该   数据库“联合利华”表中发生冲突   “dbo.InviteConfiguration”,列'InviteID'。声明一直如此   终止。

我看到有一些键设置了表之间的引用,我怎么才强制删除呢?

3 个答案:

答案 0 :(得分:2)

您可以更改约束以执行ON DELETE CASCADE

警告:这会级联删除所有引用主键的记录。你应该判断这是不是你想要的。

答案 1 :(得分:2)

  

我看到有些键设置了表之间的引用   我怎么才强制删除呢?

您可以这样做,但最好只更新或删除引用表中的行

ALTER TABLE InviteConfiguration NOCHECK CONSTRAINT ALL

或用稍小的锤子

 ALTER TABLE InviteConfiguration NOCHECK CONSTRAINT FK_InviteConfiguration_Invite

答案 2 :(得分:1)

您要求克服数据完整性约束。这不是一个好的做法(温和地说),你应该以不同的方式解决问题。

依赖于您尝试删除的记录的存在记录。如果你设法打破限制,他们将成为孤儿并成为垃圾。您也应该删除它们(在删除它们所依赖的记录之前)或者只是对它们所依赖的记录进行更新而不是删除它们。这一切都取决于您尝试实现的业务逻辑语义。无论如何,您应始终遵守数据完整性规则。

您可能觉得有用的an SO discussion on this topic。我建议阅读帖子和建议,其中包括一些有价值的考虑因素,但没有实施任何黑客攻击。