標籤:
在需要實現串聯刪除的情況下,使用 FOREIGN KEY的ON DELETE CASCADE選項非常方便,但在同一張表中,如果有兩個外鍵引用外表資料,那麼最多隻能將一個外鍵設為 ON DELETE CASCADE,其他的參考條件約束需要使用觸發器實現串聯刪除。
1 --建立單詞表 2 IF EXISTS (SELECT * FROM sysobjects WHERE name=‘Word‘) 3 DROP TABLE Word 4 CREATE TABLE Word 5 ( 6 wordID int NOT NULL CONSTRAINT PK_Word PRIMARY KEY IDENTITY(1,1), 7 --單詞編號 8 word nvarchar(50) NOT NULL CONSTRAINT UQ_Word UNIQUE, 9 --單詞10 )11 GO12 13 --單詞關係表14 IF EXISTS (SELECT * FROM sysobjects WHERE name=‘WordRelation‘)15 DROP TABLE WordRelation16 CREATE TABLE WordRelation17 (18 relationID int NOT NULL CONSTRAINT PK_WordRelation PRIMARY KEY IDENTITY(1,1), 19 --單詞關聯性記錄編號20 wordSID int NOT NULL CONSTRAINT FK_Word_WordRelation_S FOREIGN KEY REFERENCES Word(wordID) ON DELETE CASCADE,21 --主單詞編號22 wordOID int NOT NULL CONSTRAINT FK_Word_WordRelation_O FOREIGN KEY REFERENCES Word(wordID) ON DELETE CASCADE,23 --從單詞編號24 )25 GO
報告錯誤為:
訊息 1785,層級 16,狀態 0,第 5 行將 FOREIGN KEY 約束 ‘FK_Word_WordRelation_O‘ 引入表 ‘WordRelation‘ 可能會導致迴圈或多重級聯路徑。請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 約束。訊息 1750,層級 16,狀態 0,第 5 行無法建立約束。請參閱前面的錯誤訊息。
SQLServer FOREIGN KEY ON DELETE CASCADE 限制條件