Share via


MSSQLSERVER_1785

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 1785
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 CRTFKINVTOPO
訊息文字 在資料表 '%.ls'上導入 FOREIGN KEY 條件約束 '%.ls' 可能造成循環或多個串聯路徑。 請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或者修改其他 FOREIGN KEY 條件約束。

說明

因為在 SQL Server 中,資料表不能出現在由 或 UPDATE 語句啟動 DELETE 的所有級聯引用動作清單中一次以上,所以您會收到此錯誤訊息。 級聯引用動作的樹狀結構必須只有一個路徑,才能在級聯參考動作樹狀結構上的特定資料表。

如下的錯誤訊息會回報給使用者:

伺服器:Msg 1785、層級 16、狀態 1、第 1 行在資料表 'table2' 上引進 FOREIGN KEY 條件約束 'fk_two',可能會導致迴圈或多個串聯路徑。 請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或者修改其他 FOREIGN KEY 條件約束。 伺服器:訊息 1750、層級 16、狀態 1、第 1 行無法建立條件約束。 請參閱先前的錯誤

使用者動作

若要解決此問題,請建立外鍵,以在串連引用動作清單中建立資料表的單一路徑。

您可以透過數種方式強制執行參考完整性。 宣告式參考完整性 (DRI) 是最基本的方式,但它也是最不具彈性的方式。 如果您需要更多彈性,但仍想要高度的完整性,您可以改用觸發程式。

其他相關資訊

下列範例程式碼是產生錯誤訊息的 FOREIGN KEY 建立嘗試範例:

USE tempdb
GO

CREATE TABLE table1 (user_ID INTEGER NOT NULL PRIMARY KEY, user_name
CHAR(50) NOT NULL)
GO

CREATE TABLE table2 (author_ID INTEGER NOT NULL PRIMARY KEY, author_name
CHAR(50) NOT NULL, lastModifiedBy INTEGER NOT NULL, addedby INTEGER NOT NULL)
GO

ALTER TABLE table2 ADD CONSTRAINT fk_one FOREIGN KEY (lastModifiedby)
REFERENCES table1 (user_ID) ON DELETE CASCADE ON UPDATE cascade
GO

ALTER TABLE table2 ADD CONSTRAINT fk_two FOREIGN KEY (addedby)
REFERENCES table1(user_ID) ON DELETE NO ACTION ON UPDATE cascade
GO
--this fails with the error because it provides a second cascading path to table2.

ALTER TABLE table2 ADD CONSTRAINT fk_two FOREIGN KEY (addedby)
REFERENCES table1 (user_ID) ON DELETE NO ACTION ON UPDATE NO ACTION
GO
-- this works.

另請參閱

級聯參考完整性