2012-11-07 103 views
2

我想要做的是從父表中刪除一行以將數據保留在子表中。ON DELETE NO ACTION約束在SQL Server數據庫中

也就是說,如果我有一個表處,這與兩列父表 - depNodepName,並與三列的子表 - emNoemNamedepNo (FK)

我想能夠刪除父表中的行,但要保留在子表中的一個(在我的情況下,它與許可證連接,並且是一個好主意來跟蹤它,即使用戶已被刪除)。

我猜ON DELETE NO ACTION將無法​​正常工作,因爲如果我嘗試刪除父表中的行,它會給我一個錯誤。

CASCADE和​​在這種情況下不好。

SET Default - 它不會工作,因爲我無法設置默認值 - 它可能不同(它100%確定它會)。

任何想法如何使它?

+0

爲什麼你需要保留孩子的數據?你能不能把它移動到歷史表格? – Oded

+1

不,我需要數據留在子表中 - 完全像歷史表一樣。所以如果我刪除父表中的行,子表中的FK應該保留。 – Apostrofix

+1

然後,您需要從子表中刪除FK約束,並有可能導致數據不一致。你所建議的是一個糟糕的數據庫設計。你應該像這樣將子行移動到不同的表中。 – Oded

回答

2

使用仍包含原始值的外鍵列保留子數據的唯一方法是刪除外鍵約束,從而冒着添加不一致數據的風險。

我建議創建一個沒有外鍵約束的新表,並在刪除之前將子行復制到它。

相關問題