다음을 통해 공유


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.

참고 항목

연계 참조 무결성