2011-10-26 37 views
1

我有一个过程,将一些数据添加到数据库。一些列是键。我需要能够在进程运行后删除行(这样我可以再次运行它)。但我得到以下错误:如何在删除记录时暂时关闭此错误?

Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_InviteConfiguration_Invite". The conflict occurred in database "Unilever", table "dbo.InviteConfiguration", column 'InviteID'. The statement has been terminated.

我看到有一些键设置与表之间的引用如何只是强制删除吗?

+1

什么味道的RDBMS?看起来像SQL Server,但请指定。 –

+2

这是另一个问题的症状吗?您在InviteConfiguration中拥有'Invite'中的参考记录记录。你为什么试图删除引用的记录? InviteConfiguration中的记录是否也应该删除?你是否试图删除错误的记录? “InviteConfiguration”中的记录是否引用了“Invite”中的错误记录?如果它不是错误的,为什么'InviteConfiguration'中的记录需要删除引用记录? “InviteConfiguration”中的外键在“Invite”中的引用记录之后是否被删除? – MatBailie

回答

2

I see that there are some keys set with references between the tables how do I just force the deletion anyway?

你可以做到这一点,但它可能只是为了更好地更新或引用表

ALTER TABLE InviteConfiguration NOCHECK CONSTRAINT ALL 

或略小锤

ALTER TABLE InviteConfiguration NOCHECK CONSTRAINT FK_InviteConfiguration_Invite 
2

你可以改变约束做ON DELETE CASCADE

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

+2

请注意,这不会让它“无论如何删除它”,但它也会删除所有引用它的记录。谨慎使用。 – vcsjones

+0

@vcsjones正确 – Icarus

1

你删除的行要求黑客克服数据完整性约束。这不是一个好的做法(要温和地说),你应该以不同的方式处理问题。

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

这里的an SO discussion on this topic,你可能会觉得有用。我建议阅读这篇文章,并提出一些建议,其中包括一些有价值的考虑因素,但不会实施任何黑客行为。

+0

嗨,这只是为了测试的目的,我需要擦洗数据并重复一个过程多次... – Exitos