MSSQLSERVER_1785
적용 대상: SQL Server
세부 정보
attribute | 값 |
---|---|
제품 이름 | SQL Server |
이벤트 ID | 1785 |
이벤트 원본 | MSSQLSERVER |
구성 요소 | SQLEngine |
심볼 이름 | CRTFKINVTOPO |
메시지 텍스트 | FOREIGN KEY 제약 조건 ‘%.ls’을(를) 테이블 ‘%.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 제약 조건을 수정하십시오. 서버: Msg 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.