[sql] ALTER TABLE 문이 FOREIGN KEY 제한 조건과 충돌했습니다.

tblDomare테이블에 외래 키를 추가하려고 할 때 문제가 있습니다 . 내가 여기서 뭘 잘못하고 있니?

CREATE TABLE tblDomare
(PersNR VARCHAR (15) NOT NULL,
fNamn VARCHAR (15) NOT NULL,
eNamn VARCHAR (20) NOT NULL,
Erfarenhet VARCHAR (5),
PRIMARY KEY (PersNR));

INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (6811034679,'Bengt','Carlberg',10);

INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (7606091347,'Josefin','Backman',4);

INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (8508284163,'Johanna','Backman',1);

CREATE TABLE tblBana
(BanNR VARCHAR (15) NOT NULL,
PRIMARY KEY (BanNR));

INSERT INTO tblBana (BanNR)
Values (1);

INSERT INTO tblBana (BanNR)
Values (2);

INSERT INTO tblBana (BanNR)
Values (3);

ALTER TABLE tblDomare
ADD FOREIGN KEY (PersNR)
REFERENCES tblBana(BanNR);

에러 메시지:

ALTER TABLE 문이 FOREIGN KEY 제한 조건 “FK_ tblDomare _PersN__5F7E2DAC” 와 충돌했습니다 . 데이터베이스 “almu0004”, 테이블 “dbo.tblBana”, 열 ‘BanNR’에서 충돌이 발생했습니다.



답변

당신이에서 외래 키 만들려고 때문에 발생 tblDomare.PersNRtblBana.BanNR있지만 /와의 값 tblDomare.PersNR의 값 중 하나와 일치하지 않습니다를 tblBana.BanNR. 참조 무결성을 위반하는 관계를 작성할 수 없습니다.


답변

이 쿼리는 나에게 매우 유용했습니다. 일치하지 않는 모든 값을 표시합니다

select FK_column from FK_table
WHERE FK_column NOT IN
(SELECT PK_column from PK_table)


답변

이 솔루션을 사용해보십시오 :

테이블에 관련 값이 기본 키 테이블로 사용하려는 테이블에 존재하지 않는 데이터 항목이 있습니다. 테이블을 비우거나 관련 값을 두 번째 테이블에 추가하십시오.


답변

ALTER TABLE tablename WITH NOCHECK …을 사용하여 외래 키를 만들 수 있습니다. 외래 키를 위반하는 데이터가 허용됩니다.

FK를 추가하기위한 “ALTER TABLE tablename WITH NOCHECK …”옵션-이 솔루션은 저에게 효과적이었습니다.


답변

외래 키 테이블의 열 값이 기본 키 테이블의 열 값과 일치해야합니다. 하나의 열 내부의 값 (외래 키로 이동)이 기본 키 테이블의 열 값과 다른 두 테이블 사이에 외래 키 제약 조건을 만들려고하면 메시지가 throw됩니다.

따라서 항상 기본 키 테이블 열에있는 외래 키 열에 해당 값만 삽입하는 것이 좋습니다.

예를 들어. 기본 테이블 열의 값이 1, 2, 3이고 외래 키 열의 경우 삽입 된 값이 다르면 값이 1과 3 사이 일 것으로 예상되므로 쿼리가 실행되지 않습니다.


답변

테이블에 외래 키를 추가하기 전에 다음을 수행하십시오.

  1. 테이블이 비어 있거나 열 데이터가 일치해야합니다.
  2. 널이 아닌지 확인하십시오.
  3. 테이블에 디자인 및 변경이없는 경우 수동으로 수행하십시오.

    테이블 변경 표 1 외래 키 추가 (열 이름) 참조 표 2 (열 이름)

    alter table 표 1 alter column 열 이름 특성 not null


답변

테이블에서 데이터를 정리 한 다음 관계를 맺습니다.