Подтвердить что ты не робот

SQL Server 2008: столбцы в таблице не соответствуют существующему первичному ключу или уникальному ограничению

Мне нужно внести некоторые изменения в базу данных SQL Server 2008.

Для этого требуется создание новой таблицы и вставка внешнего ключа в новую таблицу, которая ссылается на основной ключ уже существующей таблицы. Поэтому я хочу установить связь между моим новым tblTwo, который ссылается на первичный ключ tblOne.

Однако, когда я пытался это сделать (через SQL Server Management Studio), я получил следующую ошибку:

Столбцы в таблице "tblOne" не сопоставить существующий первичный ключ или УНИКАЛЬНОЕ ограничение

Я не совсем уверен, что это значит, и мне было интересно, есть ли что-то в этом роде?

4b9b3361

Ответ 1

Это означает, что первичный ключ в tblOne не был объявлен должным образом - вам нужно перейти в tblOne и добавить на него ограничение PRIMARY KEY.

Если вы уверены, что у tblOne есть ограничение PRIMARY KEY, то, возможно, в вашей БД есть несколько таблиц tblOne, принадлежащих разным схемам, а ваше предложение ссылок в вашем ограничении FK выбирает неправильный.

Если есть составной ключ (который будет указывать ваш комментарий), тогда вы должны включить оба столбца в свою ссылку на внешний ключ. Обратите внимание, что таблица не может иметь несколько первичных ключей, но если у нее есть составной ключ, вы увидите символ ключа рядом с каждым столбцом, который является частью первичного ключа.

Ответ 2

Если у вас есть составной ключ, порядок важен при создании FK, а иногда порядок не отображается.

Что я делаю, перейдите в раздел "Ключи" таблицы1 и выберите первичный ключ script как создайте в буфер обмена, а затем создайте FK, используя порядок, как показано в script

Ответ 3

У меня была такая ситуация, которая привела меня к этой теме. Такая же ошибка, но другая причина. Может быть, это поможет кому-то.

Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB

При попытке создать внешний ключ в таблице 2 я выбираю значения из поля со списком в обратном порядке

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

Это вызвало ошибку, как в названии темы. Создание порядка хранения столбцов в таблице первичных ключей, как они есть, исчезла ошибка.

Глупо, но..:)

Ответ 4

Если вы по-прежнему получаете эту ошибку после того, как последовали все советы из приведенных выше ответов, все выглядит правильно.

Один из способов исправить это, удалив основные ключи для обеих таблиц, сохраните, обновите и добавьте их снова. Затем попробуйте добавить свои отношения снова.

Ответ 5

Эта проблема меня поймала, я добавлял отношения в неправильную таблицу. Поэтому, если вы пытаетесь добавить отношения в таблицу A в таблицу B, попробуйте добавить отношение в таблицу B к таблице A.

Ответ 6

Эта ошибка произошла со мной When Я попытался ограничить add foreign key, начиная с PrimaryKey Table

Simpy перейдите в другую таблицу и create this foreign key ограничение from там (foreign key Table)

Ответ 7

Похоже, вы пытаетесь создать внешний ключ в tblTwo, который не соответствует (или участвует) с любым первичным ключом или уникальным индексом в tblOne.

Отметьте эту ссылку на MSDN. Здесь у вас есть другая ссылка с практическим случаем .

EDIT:

Отвечая на ваш комментарий, я понимаю, вы имеете в виду, что в первичном ключе есть 2 поля (что делает его составным). В SQL невозможно иметь 2 первичных ключа в одной таблице.

IMHO, поле внешнего ключа должно всегда ссылаться на один регистр в ссылочной таблице (т.е. весь первичный ключ в вашем случае). Это означает, что перед созданием внешнего ключа необходимо поместить оба поля первичного ключа tblOne в tblTwo.

В любом случае, я немного поработал над Интернетом, и кажется, что SQL Server 2008 (как некоторые предыдущие версии и другие РСУБД) дает вам возможность ссылаться только на часть первичного ключа, пока эта часть является ключом кандидата ( Not Null и Unique), и вы создаете для него уникальное ограничение.

Я не уверен, что вы можете использовать это в своем случае, но посмотрите эту ссылку для получения дополнительной информации об этом.

Ответ 8

Я обнаружил, что имена столбцов должны совпадать.

Пример: Так что если tblOne имеет id, называемый categoryId, ссылку в tblTwo также следует называть categoryId.

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

Я заметил это при попытке создать внешний ключ между двумя таблицами, которые оба имели имя столбца "id" в качестве первичного ключа.

Ответ 9

Если ничего не помогает, то это может быть причиной: Учитывая этот случай: Таблица A: Столбец 1 (первичный ключ) Столбец 2 (первичный ключ) Столбец 3 Столбец 4

Таблица B: Столбец a (первичный ключ) Столбец b Столбец c

когда вы определяете зависимость B от A, вы вынуждены соблюдать порядок, в котором определены первичные значения.

Это означает, что ваша зависимость должна выглядеть так: Таблица A Таблица B Столбец 1 Столбец b Столбец 2 Столбец c

И НЕ: Таблица A Таблица B Столбец 2 Столбец c Столбец 1 Столбец b

то это приведет к ошибке, с которой вы сталкиваетесь.

Ответ 10

Я нашел другой способ получить эту ошибку. Это также может произойти, если вы пытаетесь сделать рекурсивный внешний ключ (внешний ключ для первичного ключа в той же таблице) в представлении дизайна в SQL Management Studio. Если вы еще не сохранили таблицу с помощью первичного ключа, она вернет это сообщение. Просто сохраните таблицу, тогда она позволит вам создать внешний ключ.