2011-10-26 57 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