itsource

SQL Server 2008:테이블의 열이 기존 기본 키 또는 고유 제약 조건과 일치하지 않습니다.

mycopycode 2023. 7. 6. 22:12
반응형

SQL Server 2008:테이블의 열이 기존 기본 키 또는 고유 제약 조건과 일치하지 않습니다.

SQL Server 2008 데이터베이스를 변경해야 합니다.

이렇게 하려면 새 테이블을 만들고 새 테이블에 기존 테이블의 기본 키를 참조하는 외부 키를 삽입해야 합니다.그래서 저는 tblOne의 기본 키를 참조하는 제 새로운 tblTwo 간의 관계를 설정하고 싶습니다.

하지만 (SQL Server Management Studio를 통해) 이 작업을 시도했을 때다음 오류가 발생했습니다.

'tblOne' 테이블의 열이 기존 기본 키 또는 고유 제약 조건과 일치하지 않습니다.

이게 무슨 뜻인지 잘 모르겠는데, 혹시 다른 방법이 없을까 해서요.

이것은 tblOne의 기본 키가 제대로 선언되지 않았음을 의미합니다. tblOne으로 이동하여 주 키 제약 조건을 다시 추가해야 합니다.

tblOne에 주 키 제약 조건이 있는 것이 확실하다면 DB에 서로 다른 스키마에 속하는 여러 tblOne 테이블이 있을 수 있으며 FK 제약 조건의 참조 절이 잘못된 테이블을 선택하고 있습니다.

복합 키가 있는 경우(댓글에 표시될 수 있음), 외부 키 참조에도 두 열을 모두 포함해야 합니다.테이블에는 여러 개의 기본 키가 있을 수 없지만 복합 키가 있는 경우 기본 키의 일부인 각 열 옆에 키 기호가 표시됩니다.

복합 키가 있는 경우 FK를 작성할 때 순서가 중요하며, 표시 방법이 순서가 아닌 경우도 있습니다.

표 1의 키 섹션으로 이동하여 스크립트 기본 키를 클립보드에 만들 때 선택한 다음 스크립트에 표시된 순서를 사용하여 FK를 만듭니다.

저는 이 주제로 저를 이끌었던 상황을 겪었습니다.동일한 오류이지만 다른 원인이 있습니다.아마도 누군가에게 도움이 될 것입니다.

Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB

표 2에서 외부 키를 생성하려고 할 때 콤보 상자에서 역순으로 값을 선택했습니다.

Table1.ColB = Table2.ColB
Table1.ColA = Table2.ColA

이것은 나에게 토픽 이름과 같은 오류를 던지고 있었습니다.기본 키 테이블의 열 순서를 그대로 유지하는 FK를 생성하면 오류가 사라집니다.

멍청하긴 하지만..:)

위 답변의 모든 조언을 따르고도 오류가 발생하면 모든 것이 올바르게 표시됩니다.

이 문제를 해결하는 한 가지 방법은 두 테이블의 기본 키를 제거하고 저장, 새로 고침 및 다시 추가하는 것입니다.그런 다음 관계를 다시 추가해 보십시오.

는 저와 했습니다.When하려고 했습니다.add foreign key 조건: " " " 로 합니다.PrimaryKey Table

심는다테로가서블이른그고리, 피고▁sim,그리▁and▁to가서▁go.create this foreign key 조건 약from거기 (foreign key Table)

이 문제는 저를 들켰습니다. 저는 잘못된 표에 관계를 추가하고 있었습니다.따라서 테이블 A의 관계를 테이블 B에 추가하려면 테이블 B의 관계를 테이블 A에 추가합니다.

tblOne의 기본 키 또는 고유 인덱스와 일치하지 않는(또는 참여하지 않는) 외부 키 in tblTwo를 생성하려고 하는 것 같습니다.

MSDN에서 이 링크를 확인해 보세요.여기 실용적인 사례와 관련된 또 다른 링크가 있습니다.

편집:

당신의 의견에 답변을 드리자면, 기본 키에 2개의 필드가 있다는 것을 이해했습니다(복합 키가 됩니다).SQL에서는 두 개의 기본 키를 동일한 테이블에 둘 수 없습니다.

IMHO, 외부 키 필드는 항상 참조된 테이블의 단일 레지스터(즉, 사용자의 경우 전체 기본 키)를 참조해야 합니다.즉, 외부 키를 만들기 전에 tblOne 기본 키의 두 필드를 tblTwo에 모두 입력해야 합니다.

어쨌든 인터넷을 통해 조사해 본 결과 SQL Server 2008(일부 이전 버전 및 기타 RDBMS)은 기본 키의 일부(Null 및 고유하지 않음)만 참조할 수 있으며 이 부분에 고유한 제약 조건을 생성할 수 있습니다.

당신의 경우 그것을 사용할 수 있을지는 모르겠지만, 자세한 내용은 이 링크를 참조하십시오.

열 이름이 일치해야 합니다.

예:따라서 tblOne이 categoryId를 호출한 경우 tblTwo의 참조도 categoryId라고 불러야 합니다.

_tblname, primary key name, foreign key_
tblOne, "categoryId", none
tblTwo, "exampleId", "categoryId"

둘 다 기본 키로 열 이름 "id"가 있는 두 테이블 사이에 외부 키를 생성하려고 할 때 이를 발견했습니다.

아무런 도움이 되지 않는다면 다음과 같은 이유가 있을 수 있습니다.이 경우를 고려하면 다음과 같습니다.표 A: 1열(기본 키) 2열(기본 키) 3열 4열

표 B: 열 a (기본 키) 열 b 열 c

A에 대한 종속성 B를 정의할 때는 주성분이 정의된 순서를 존중해야 합니다.

즉, 종속성은 다음과 같이 표시됩니다.표 A 표 B 1열 b 2열 c

참고: 표 A 표 B 열 2 열 c 열 1 열 b

그러면 오류가 발생합니다.

이 오류를 해결할 다른 방법을 찾았습니다.SQL Management Studio의 설계 보기에서 재귀 외부 키(동일한 테이블의 기본 키에 대한 외부 키)를 만들려고 할 경우에도 이 문제가 발생할 수 있습니다.기본 키로 테이블을 아직 저장하지 않은 경우 이 메시지가 반환됩니다.테이블을 저장하기만 하면 외부 키를 만들 수 있습니다.

테이블에 데이터가 있는 경우 문제가 될 수 있습니다.

제 경우 오후 3시에 로드한 계정 테이블에 데이터가 있고 오후 3시 10분에 로드한 연락처 테이블에 데이터가 있으므로 연락처 테이블에는 아직 내 계정 테이블에 없는 값이 있습니다.

저는 연락처 테이블에서 이 값들을 삭제하고 문제없이 키를 추가할 수 있었습니다.

또한 외부 키를 다른 테이블 열로 설정할 때 기본 키가 정의된 테이블 내의 기존 데이터가 없음을 확인하십시오.

이것이 제 경우의 오류의 원인이었습니다.테이블 세트의 관계를 비운 후 데이터를 다시 업로드해야 했습니다.내 경험을 공유하는 것은 msql smss를 사용하는 것이었습니다.

언급URL : https://stackoverflow.com/questions/4667818/sql-server-2008-the-columns-in-table-do-not-match-an-existing-primary-key-or-un

반응형