Programing

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

lottogame 2021. 1. 10. 16:43
반응형

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


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

이를 위해서는 새 테이블을 만들고 이미 존재하는 테이블의 기본 키를 참조하는 새 테이블에 외래 키를 삽입해야합니다. 따라서 tblOne의 기본 키를 참조하는 새 tblTwo 간의 관계를 설정하고 싶습니다.

그러나 SQL Server Management Studio를 통해이 작업을 시도 할 때 다음 오류가 발생했습니다.

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

이것이 무엇을 의미하는지 잘 모르겠고 주위에 방법이 있는지 궁금합니다.


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

tblOne에 PRIMARY KEY 제약 조건이 있다고 확신하는 경우 DB에 다른 스키마에 속하는 여러 tblOne 테이블이 있고 FK 제약 조건의 참조 절이 잘못된 것을 선택하고있을 수 있습니다.

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


복합 키가있는 경우 FK를 만들 때 순서가 중요하며 때로는 순서가 표시되는 방식이 아닙니다.

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


위 답변의 모든 조언을 따른 후에도 여전히 오류가 발생하면 모든 것이 올바르게 보입니다.

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


나는이 주제로 저를 이끌었던 이런 상황이있었습니다. 같은 오류이지만 다른 원인입니다. 누군가를 도울 것입니다.

Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB

Table2에서 외래 키를 만들려고 할 때 콤보 상자에서 값을 역순으로 선택했습니다.

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

이것은 주제 이름과 같은 오류를 던졌습니다. 기본 키 테이블의 열 순서를 그대로 유지하는 FK를 만들면 오류가 사라집니다.

멍청하지만 .. :)


이 오류는 나와 함께 일어 When나는 노력 add foreign key에서 시작하는 제약 조건PrimaryKey Table

Simpy는 다른 테이블로 이동하고 거기에 create this foreign key제약 from을가합니다.(foreign key Table)


이 문제는 나를 잡았고 잘못된 테이블에 관계를 추가했습니다. 따라서 테이블 A의 관계를 테이블 B에 추가하려는 경우 테이블 B의 관계를 테이블 A에 추가해보십시오.


tblOne의 기본 키 또는 고유 인덱스와 일치 (또는 참여)하지 않는 외래 키를 tblTwo에서 만들려고하는 것 같습니다.

MSDN 에서이 링크를 확인하십시오 . 여기 실제 사례에 대한 또 다른 링크가 있습니다.

편집하다:

귀하의 의견에 답장하여 기본 키에 2 개의 필드가 있다는 것을 이해합니다 (복합물로 만듭니다). SQL에서는 동일한 테이블에 2 개의 기본 키를 가질 수 없습니다.

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

어쨌든, 나는 인터넷을 통해 조금 조사했으며 SQL Server 2008 (일부 이전 버전 및 기타 RDBMS) 은이 부분이 후보 키 (Not Null 및 기타 RDBMS) 인 한 기본 키의 일부만 참조 할 수있는 가능성을 제공합니다. 고유)에 고유 한 제약 조건을 만듭니다.

귀하의 경우에 사용할 수 있는지 확실하지 않지만 자세한 내용은 링크확인 하십시오.


열 이름이 일치해야한다는 것을 발견했습니다.

예 : 따라서 tblOne에 categoryId라는 ID가있는 경우 tblTwo의 참조는 categoryId라고도합니다.

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

I noticed this when trying to create foreign key between 2 tables that both had the column name "id" as primary key.


If nothing helps, then this could be the reason: Considering this case: Table A: Column 1 (Primary Key) Column 2 (Primary Key) Column 3 Column 4

Table B: Column a (Primary Key) Column b Column c

when you are defining a dependency B to A, then you are forced to respect the order in which the primaries are defined.

That's mean your dependency should look like this: Table A Table B Column 1 Column b Column 2 Column c

AND NOT: Table A Table B Column 2 Column c Column 1 Column b

then this will lead to the error you are encountering.


I've found another way to get this error. This can also happen if you are trying to make a recursive foreign key (a foreign key to the primary key in the same table) in design view in SQL Management Studio. If you haven't yet saved the table with the primary key it will return this message. Simply save the table then it will allow you to create the foreign key.


If you have data in your tables this could be the issue.

In my case I had some data in the Account table that I loaded at 3 pm, and some data in Contact table that I loaded at 3:10 pm, so Contact table had some values that weren't in my Account table yet.

I ended up deleting these values from the contact table and then managed to add a key without any problems.

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

반응형