我有一个向数据库添加一些数据的进程。有些列是键。我需要能够在进程运行后删除该行(因此我可以再次运行它)。但是我得到以下错误:
消息547,级别16,状态0,行1 DELETE语句冲突 使用REFERENCE约束“FK_InviteConfiguration_Invite”。该 数据库“联合利华”表中发生冲突 “dbo.InviteConfiguration”,列'InviteID'。声明一直如此 终止。
我看到有一些键设置了表之间的引用,我怎么才强制删除呢?
答案 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。我建议阅读帖子和建议,其中包括一些有价值的考虑因素,但没有实施任何黑客攻击。