簡體   English   中英

SQL Server 2005,強制執行外鍵約束和級聯刪除

[英]SQL Server 2005, Enforce Foreign Key Constraint and Cascade Delete

我正在使用SQL Server 2005,必須將關系放入一張表中。 我必須關閉“強制外鍵約束”,因為我在同一個表中有2個關系。

但是我想把級聯刪除。

我想如果在這兩個關系上都具有級聯刪除功能,並且如果我說從這些表中的某一個上刪除某些內容,它將級聯並刪除到另一個表中。

但是,它似乎沒有那樣的工作方式,我想知道是因為我取消了前鍵約束嗎?

如果是這種情況,我該如何解決?

SQL Server將不允許多個級聯路徑。 要解決此問題,請將“ FOR DELETE”觸發器添加到每個其他路徑。

ALTER TRIGGER [dbo].[trgMyTriggerName] ON [dbo].[tblMyTable] FOR DELETE AS
SET NOCOUNT ON
DELETE FROM tblMySubTable
WHERE MySubTable_Parent_ID IN (SELECT MyTable_ID FROM deleted)

您仍將要添加外鍵,只需將“強制外鍵約束”設置為“否”,並使“刪除規則”和“更新規則”不執行任何操作。 這使您可以使用外鍵的所有優點(智能,實體框架等)。

您必須具有fk約束才能強制執行級聯刪除。 SQL Server如何知道要刪除什么?

我不清楚您為什么首先需要禁用外鍵約束。 您可以在同一個表上建立許多關系,所有關系都強制執行參照完整性。 但是,如果您在同一子表中具有與同一父表的兩個關系,則只能對其中一個啟用級聯更新或級聯刪除。

TBH,我想不出想要建立關系但不希望建立關系的情況。 您應該始終修復數據並強制執行關系,以免數據損壞。

實際上,在這種情況下,通過存儲過程對數據進行訪問可以提供幫助。 如果強迫人們僅通過存儲過程進行刪除,則可以在過程中強制執行級聯刪除,而不必在DRI中強制執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM