itsource

INSERT 문이 외부 키 제약 조건과 충돌합니다(SQL Server).

mycopycode 2023. 4. 7. 21:17
반응형

INSERT 문이 외부 키 제약 조건과 충돌합니다(SQL Server).

메시지 547, 레벨 16, 상태 0, 회선 1
INSERT 문이 FORENAL 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에 대응하는 컬럼으로 변환합니다.

테이블dbo.Sup_Item_Cat에는 다른 테이블에 대한 외부 키 참조가 있습니다.FK가 작동하는 방식은 참조 테이블의 기본 키 열에 없는 값을 해당 열에 포함할 수 없습니다.

SQL Server Management Studio가 있는 경우 열고sp_help'dbo.Sup_Item_Cat'. FK가 어느 열에 있는지, 그리고 FK가 어느 테이블의 어느 열을 참조하는지 확인합니다.잘못된 데이터를 삽입하고 있습니다.

페이지의 Mike M.답변은 정확합니다.

FK가 작동하는 방식은 참조 테이블의 기본 키 열에 없는 값을 해당 열에 포함할 수 없습니다.

이 답변에서 누락된 것은 프라이머리 키가 포함된 테이블을 먼저 작성해야 한다는 것입니다.

외부 키에 데이터를 삽입하기 전에 프라이머리 키를 포함한 데이터를 부모 테이블에 삽입해야 합니다.

프라이머리 키 데이터를 추가한 후 자녀 테이블의 외부 키 데이터는 부모 테이블의 프라이머리 키필드에 준거해야 합니다.

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

예를 들어 다음과 같습니다.[저작자(Books)]테이블에 [저작자(Books and Authors)]테이블이 있고 [저작자(Books)]테이블에 [외부(Books)]키 제약이 있는 경우, 작성자 레코드가 없는 북레코드를 삽입하려고 합니다.

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

제가 본 바로는 client_id에 문제가 없습니다.네 번째 열 sup_item_cat_id에 문제가 있는 것 같습니다.

나는 도망갈 것이다

sp_helpconstraint sup_item

외부 키 FK_Sup_Item_Sup_Item_Item_Cat에 대해 반환되는 contraint_keys 열에 주목하여 실제 문제가 있는 컬럼을 확인하지만 수정하려는 컬럼은 아닌 것 같습니다.게다가 '123123'도 의심스러워 보여요

모든 필드가 정확히 일치해야 합니다.

예를 들어, 'cat dog'를 보내는 것은 'cat dog'를 보내는 것과 같지 않습니다.

이 문제를 해결하려면 데이터를 삽입할 테이블에서 FK 코드를 스크립팅하고 제약 조건이 있는 "외부 키"를 확인하여 FK 제약 조건 오류를 발생시키는 테이블에서와 정확히 일치하는지 확인하십시오.

필드를 수정합니다.

삽입값 필드에는 탭과 맨눈으로는 알 수 없는 공간이 포함되어 있습니다.Excel에서 값 목록을 만들고 이를 복사하여 SQL에 붙여넣은 다음 쿼리를 실행하여 FK 필드에서 일치하지 않는 항목을 찾았습니다.

일치 쿼리는 FK 필드에 탭과 공백이 있는 것을 검출하지 못했지만 INSERT는 이를 인식하고 오류를 계속 생성합니다.

FK 필드의 내용을 하나의 레코드에 복사하여 삽입 쿼리에 붙여넣어 다시 테스트했습니다.그 기록도 실패했을 때, 나는 데이터를 더 자세히 보고 마침내 탭/스페이스를 감지했다.

삭제된 탭/스페이스를 청소하면 문제가 해결되었습니다.

외부 키가 정의되어 있는 관계 필드를 다시 확인합니다.SQL Server Management Studio에서 관계를 정의할 때 원하는 필드를 선택하지 않았을 수 있습니다.과거에 이 일로 화상을 입은 적이 있다.

  1. sp_helpconstrant를 실행합니다.
  2. 외부 키에 대해 반환되는 contraint_keys 열에 주의하십시오.

내 경우 잘못된 순서로 값을 하위 테이블에 삽입했습니다.

컬럼이 있는 :column1 ★★★★★★★★★★★★★★★★★」column2잘못 입력했을 때 다음 오류가 발생하였습니다.

INSERT INTO Table VALUES('column2_value', 'column1_value');

다음 포맷을 사용했을 때 오류가 해결되었습니다.-

INSERT INTO Table (column2, column1) VALUES('column2_value', 'column1_value');

mybatis.mybatis를 사용하여 할 수 으로 발생하였습니다.
DB가 필요 없다(PK, FK, FK)
올바른 삽입 순서(부모 레코드 먼저)를 가지고 있습니다.디버깅에서는 각 PK가 삽입된 부모 레코드를 확인할 수 있었습니다.다음 스테이트먼트 직후에 올바른 FK가 포함된 자녀 레코드를 삽입할 수 없었습니다.

이 문제는 ID 재시딩으로 해결되었습니다.

DBCC CHECKIDENT ('schema.customer', RESEED, 0);
DBCC CHECKIDENT ('schema.account', RESEED, 0);

이전에 실패한 코드가 작동하기 시작했습니다.

코드 우선 마이그레이션을 사용하여 MVC 5 애플리케이션용 데이터베이스를 구축했습니다.configuration.cs 파일의 시드 메서드가 문제의 원인이 되어 일치하는 프라이머리 키를 사용하여 엔트리를 작성하기 전에 외부 키를 포함하는 테이블의 엔트리를 작성했습니다.

언급URL : https://stackoverflow.com/questions/2965837/insert-statement-conflicted-with-the-foreign-key-constraint-sql-server

반응형