2011-02-03 90 views
1

在我的數據庫中,我有許多可以相互關聯的對象。級聯刪除一個可以與自己相關的對象

這很好,直到我決定要刪除這些對象。由於關係記錄,我需要實現級聯刪除以防止引發異常。

當關系兩邊的對象被刪除時,我想要關聯記錄也被刪除。我想創建一個數據庫結構,看起來像這樣:

CREATE TABLE [MyObject] 
(
    [ID] [int] IDENTITY PRIMARY KEY, 
    ... 
); 

CREATE TABLE [MyObjectRelation] 
(
    [ID] [int] IDENTITY PRIMARY KEY, 
    [MyObjectID] [int] FOREIGN KEY REFERENCES [MyObject] ([ID]) ON DELETE CASCADE, 
    [RelatedMyObjectID] [int] FOREIGN KEY REFERENCES [MyObject] ([ID]) ON DELETE CASCADE 
) 

但是,每當我試圖在我的數據庫運行此,我收到此錯誤信息:

引進國外KEY約束」。 ..'表'MyObjectRelation'可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

我已閱讀關於此的文檔,但我不明白這種佈局會如何導致循環。當然,我完全有可能誤解了MSDN上的級聯刪除文檔,而上面的數據庫佈局不會達到我想要的。

我會很有興趣聽到我能做些什麼來實現我想要的行爲。

+0

錯誤消息並未傳達它將投訴的全部情況。文檔確實說「由單個DELETE或UPDATE觸發的一系列級聯引用操作必須形成一個*樹*,其中不包含循環引用。*所有級聯引用操作的列表中不能出現多次表格刪除或更新。*「 – AakashM 2011-02-03 10:31:26

回答

1

您會收到此錯誤消息,因爲在SQL Server中,表不能在DELETE或UPDATE語句啓動的所有級聯參考操作的列表中出現超過一次。例如,級聯參照動作樹必須只有一條路徑到達級聯參照動作樹上的特定表。

您可以使用觸發器來實現相同的行爲。

相關問題