2011-02-14 143 views
4

我不是100%確定級聯刪除是如何工作的。SQL Server 2005級聯刪除

我有一個看起來像這樣的

用戶簡單表格 USER_ID

ExtendedUser USER_ID

評論 USER_ID

帖子 USER_ID

我基本上有一噸的引用來自User的User_ID的表格。我想在一個表上設置級聯刪除,以便我可以刪除User對象並確保引用User的所有表都被刪除。

但是,我的理解是,我需要在每個引用用戶的表上設置刪除操作。那就是我需要在每個子表上設置「級聯刪除」。我的理解是否正確?

SQL Server Cascading

更新: 它看起來像我必須將其設置爲每一段關係。我應該在哪裏將這些關係看作是「存儲」的?也許我的觀念不對。

看起來我可以使用父表中的管理工作室爲每個關係設置所有參照完整性規則。

回答

7

對於每個關係,您可以指定要執行的操作。

管理這種可能性最簡單的方法是使用SQL Server Management Studio。設計你的父表,並找到所有的PK-FK關係。

對於每一個選擇當刪除事件發生時該走的路:

  • 無動作 - 當它發生時
  • 級聯這將導致FK錯誤 - 刪除子記錄
  • 設置爲null - FK列值將爲空。當子表中不允許有空值時,這顯然會引發錯誤。
  • 設置默認值 - 如果子表上的FK列有默認值,則它將是子列中的新值。

enter image description here

+0

坎貝爾感謝。這就是我所做的!我想我會檢查每個子表,但我可以看到來自父母的關係。我認爲這是我的困惑。 – 2011-02-14 16:44:13

0

你所描述似乎是壞的魔力(特別是如果你不執行引用完整性)。考慮以下幾點:

你有3個表引用的用戶表:客戶,員工和客戶

如果我理解正確,你是說,當你刪除一個引用的用戶記錄,那麼你需要一個客戶端記錄該用戶記錄也被刪除(正確?)。

如果你做到這一點,有一些引用相同的用戶記錄那麼他們會突然指着什麼(如果不實施參照完整性)員工和客戶記錄。

在我看來,如果你有一大堆的用戶參考表,那麼你不應該做的級聯刪除表...

+0

我敢肯定柯蒂斯意味着它周圍的其他方法 - 如果刪除父記錄,孩子們被刪除,而不是相反。我肯定有數據庫支持它的情況。但在一般情況下,我同意,你應該覺得很辛苦是否啓用級聯刪除。它的安全,讓您刪除您的代碼明確的 - 那麼你就要考慮一下,而且不太可能遭受不幸的數據丟失事故。 – 2012-01-05 19:37:11