INSERT 문이 FOREIGN KEY 제약 조건과 충돌했습니다.-SQL Server


225

다음과 같은 오류가 발생합니다. 저 좀 도와 주 시겠어요?

메시지 547, 수준 16, 상태 0, 줄 1
INSERT 문이 FOREIGN KEY 제약 조건 "FK_Sup_Item_Sup_Item_Cat"과 충돌했습니다. 데이터베이스 "dev_bo", 테이블 "dbo.Sup_Item_Cat"에서 충돌이 발생했습니다. 그 진술서는 만료되었습니다.

암호:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')

마지막 열 client_id에서 오류가 발생했습니다. 나는 dbo.Sup_Item_Catsup_item에 해당하는 열에 이미 존재하는 값을 넣으려고 했지만 기쁨은 없습니다 :-(


20
테이블에 일치하는 카테고리 레코드가없는 레코드를 항목 테이블에 삽입하려고했습니다 Sup_Item_Cat. 그것에 대해 말할 것도 많지 않습니다.
Martin Smith

1
그래서 SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'결과 를 반환 한다고 말하고 있습니까?
Martin Smith

2
또한 당신은 "마지막 coulum"client_id "가 충돌하고 있습니다"라고 말합니다. 이것은 오류 메시지가 의미하는 것이 아닙니다. 문제의 잘못된 위치를 찾고 있다고 생각합니다.
Martin Smith

답변:


287

당신의 테이블에서 dbo.Sup_Item_Cat 에는 다른 테이블에 대한 외래 키 참조가 있습니다. FK가 작동하는 방식은 해당 테이블에 참조 된 테이블의 기본 키 열에도없는 값을 가질 수 없다는 것입니다.

SQL Server Management Studio가있는 경우 SQL Server Management Studio를 열고 sp_help'dbo.Sup_Item_Cat '를 클릭하십시오. FK가있는 열과 참조하는 테이블의 열을 참조하십시오. 잘못된 데이터를 삽입하고 있습니다.

더 나은 설명이 필요하면 알려주세요!


10
sp_help 명령을 포함 해 주셔서 감사합니다! 비슷한 문제를 좁히는 데 도움이되었습니다.
Gaʀʀʏ

실제로-내 경우에는 속성이보기에서 컨트롤러로 다시 전송되지 않았으므로 항상 0이었습니다 (유효한 ID는 아니지만 컨트롤러는 알 수있는 방법이 없습니다).
neminem

1
Alt + F1은 sp_help의 단축키입니다. futrure 판독기의 경우 표를 선택하고 alt + f1을 누릅니다
satsvelke

133

외래 키 필드를 채우려 고하는 동안 수신 된 오류 메시지와 관련 하여이 문제가 발생했습니다. 나는 대답을 찾기 위해이 페이지에 갔다. 이 페이지에서 확인 된 답변은 실제로 올바른 답변이지만 불행히도 SQL에 익숙하지 않은 사람들에게는 답변이 약간 불완전하다고 생각합니다. 코드 작성에 상당히 익숙하지만 데이터베이스 테이블 작성뿐만 아니라 SQL 쿼리도 처음입니다.

확인 된 답변이 정확함에도 불구하고 :

마이크 M은 다음과 같이 썼다.

"FK가 작동하는 방식은 해당 테이블에 참조 된 테이블의 기본 키 열에도없는 값을 가질 수 없다는 것입니다."

이 답변에서 빠진 것은 간단합니다.

기본 키가 포함 된 테이블을 먼저 작성해야합니다.

그것을 말하는 또 다른 방법은;

외래 키가 포함 된 자식 테이블에 데이터를 삽입하기 전에 기본 키가 포함 된 부모 테이블에 데이터를 삽입해야합니다.

요컨대, 많은 튜토리얼 이이 사실에 유약 한 것처럼 보이므로 직접 시도해보고 조작 순서가 있음을 알지 못하면이 오류가 발생합니다. 기본 키 데이터를 추가 한 후에는 자식 테이블의 외래 키 데이터가 부모 테이블의 기본 키 필드를 따라야합니다. 그렇지 않으면이 오류가 계속 발생합니다.

누군가가 이것을 멀리 읽으면. 이것이 이것이 답을 더 명확하게하는 데 도움이되기를 바랍니다. 나는 이런 종류의 일이 매우 간단하고 책을 열면이 질문에 게시되기 전에이 질문에 대답했을 것이라고 생각할 수있는 일부 사람들이 있다는 것을 알고 있지만 진실은 모든 사람이 같은 방식으로 배우지는 않는다는 것입니다.


추가 할 질문은 항상 데이터베이스에 있어야한다고 생각하는 것을 보내지는 않으므로 쿼리를 프로파일 링하십시오.
HLGEM

20

외래 테이블에 존재하지 않는 외래 키 열에 값이있는 레코드를 삽입하려고합니다.

예를 들어, Books에 Authors 테이블에 외래 키 제약 조건이있는 Books and Authors 테이블이 있고 저자 레코드가없는 장부 레코드를 삽입하려고하면.


16

자세한 설명을 위해 명세서를 게시해야합니다. 그러나...

이 오류는 데이터를 삽입하는 테이블이 다른 테이블과 외래 키 관계를 가지고 있음을 의미합니다. 데이터를 삽입하려면 외래 키 필드의 값 이 다른 테이블에 먼저 존재 해야 합니다.


5

문제는 내가 볼 수있는 client_id와 관련이 없습니다. 문제가 네 번째 열인 sup_item_cat_id에있는 것 같습니다.

나는 달릴 것이다

sp_helpconstraint sup_item

외래 키 FK_Sup_Item_Sup_Item_Cat에 대해 반환 된 constraint_keys 열에주의하여 어떤 열이 실제 문제인지 확인하지만 수정하려는 열이 아닌 것이 확실합니다. '123123'외에도 의심스러워 보입니다.


5

내가 찾은 것은 모든 필드가 정확히 일치해야한다는 것입니다.

예를 들어, '고양이'를 보내는 것은 '고양이'를 보내는 것과 다릅니다.

이 문제를 해결하기 위해 데이터를 삽입하는 테이블에서 FK 코드를 스크립트로 작성하고 제약 조건이있는 "외국 키"(내 경우에는 2가 있음)를 기록하고 두 필드 값이 일치하는지 확인했습니다 FK 제약 조건 오류가 발생하는 테이블에 있던 그대로.

문제를 일으키는 2 개의 필드를 수정하면 인생은 좋았습니다!

더 나은 설명이 필요하면 알려주십시오.


이것은 정말 나를 도와주었습니다! 이 사실을 간과하고 내가 가진 문제를 해결했습니다! 감사합니다
Johnathan Brown

4

또한 SQL 코드에서 동일한 오류가 발생했습니다.이 솔루션은 저에게 효과적입니다.


기본 테이블의 데이터 확인 기본 키 열에없는 열 값을 입력하고있을 수 있습니다.


3

그것은 정확히 말하는 것을 의미합니다. 조회 테이블의 값과 일치하지 않는 FK 제약 조건이있는 열에 값을 삽입하려고합니다.


2

외래 키가 정의 된 관계의 필드를 다시 확인하십시오. 관계를 정의 할 때 SQL Server Management Studio에 원하는 필드가 없을 수 있습니다. 이것은 과거에 나를 태워 버렸습니다.


2
  1. sp_helpconstraint를 실행하십시오.
  2. 외래 키에 대해 반환 된 constraint_keys 열에주의를 기울이십시오.

2

상위 테이블 데이터가 누락되면 문제점이 발생합니다. 문제에서 "dbo.Sup_Item_Cat"의 데이터를 사용할 수 없으면 문제가 발생합니다.


1

코드 우선 마이그레이션을 사용하여 MVC 5 응용 프로그램 용 데이터베이스를 구축 할 때도 같은 문제가있었습니다. 결국 configuration.cs 파일에서 seed 메소드가 문제를 일으키는 것으로 나타났습니다. 내 시드 방법은 일치하는 기본 키로 항목을 작성하기 전에 외래 키가 포함 된 테이블에 대한 테이블 항목을 작성했습니다.


1

삽입 값 필드에 육안으로는 알 수없는 탭과 공백이 포함되어있을 때이 문제가 발생했습니다. Excel에서 값 목록을 만들어 복사하여 SQL에 붙여 넣은 다음 쿼리를 실행하여 FK 필드에서 일치하지 않는 항목을 찾습니다.

일치 쿼리가 FK 필드에 탭과 공백이 있음을 감지하지 못했지만 INSERT가이를 인식하여 오류를 계속 생성했습니다.

한 레코드에 FK 필드의 내용을 복사하여 삽입 쿼리에 붙여 넣어 다시 테스트했습니다. 해당 레코드도 실패하면 데이터를 자세히 살펴보고 탭 / 공백을 감지했습니다.

제거 된 탭 / 공간을 정리하면 문제가 해결되었습니다. 이것이 누군가를 돕기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.