SQL Server 2008: столбцы в таблице не соответствуют существующему первичному ключу или уникальному ограничению - PullRequest
51 голосов
/ 12 января 2011

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

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

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

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

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

Ответы [ 11 ]

77 голосов
/ 12 января 2011

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

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

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

54 голосов
/ 27 декабря 2012

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

Что я делаю, это иду в раздел Keys таблицы1 и выбираю первичный ключ скрипта как create to clipboard, а затем создаю FK, используя порядок, как показано в скрипте

5 голосов
/ 17 апреля 2013

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

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

4 голосов
/ 21 марта 2012

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

Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB

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

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

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

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

2 голосов
/ 22 августа 2016

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

Симпи перейти на другой стол и create this foreign key ограничение from там (foreign key Table)

2 голосов
/ 21 мая 2014

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

0 голосов
/ 08 февраля 2019

Если у вас есть данные в ваших таблицах, это может быть проблемой.

В моем случае у меня были некоторые данные в таблице Account, которые я загрузил в 15:00, и некоторые данные в таблице Contact, которые я загрузил в 15:10, поэтому в таблице Contact были некоторые значения, которых не было в моей таблице Account еще.

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

0 голосов
/ 13 ноября 2017

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

0 голосов
/ 23 марта 2012

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

Таблица B: Столбец А (первичный ключ) Колонка Б Колонна с

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

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

И НЕ: Таблица A Таблица B Колонка 2 Колонна с Колонка 1 Колонка b

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

0 голосов
/ 18 января 2012

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

Пример: Поэтому, если у tblOne есть идентификатор с именем categoryId, ссылка в tblTwo также должна называться categoryId.

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

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

...