在SQL-Server中處理自引用外鍵約束的推薦方式是什麼?自引用外鍵約束和刪除
表 - 型號:
fiData
引用在tabData以前的紀錄。如果我刪除由fiData
引用的記錄,該數據庫將引發異常:
「DELETE語句衝突以引用同一表 約束‘FK_tabDataPrev_tabDataNext’。該衝突發生於 數據庫‘MyDatabase的’,表「dbo.tabData」,列'fiData'「
如果Enforce Foreignkey Constraint
設置爲」是「。
我不需要級聯刪除被引用的記錄,但我需要在其引用的位置設置fiData=NULL
。我的想法是將Enforce Foreignkey Constraint
設置爲「否」並創建刪除觸發器。這是值得推薦的還是有更好的方法?
謝謝。
謝謝。但是我在創建觸發器時遇到了一個異常:「INSTEAD OF DELETE/UPDATE觸發器無法在具有DELETE/UPDATE動作定義的級聯的外鍵的表上定義」。 – 2011-03-24 12:31:04
我知道這個評論太遲了,但對於像我這樣搜索的人來說。 這隻會刪除一個條目。它不會遞歸地級聯。 – Arif 2012-10-05 11:56:39
@Arif - 這是「ON DELETE SET NULL」,而不是「ON DELETE CASCADE」。前者從不需要遞歸。對於「ON DELETE CASCADE」,我推薦一個CTE,它首先計算所有「ID」值的閉包,然後執行刪除操作。 – 2012-10-05 11:59:59