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

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

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

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

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

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

Ответы [ 11 ]

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

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

Проверьте эту ссылку на MSDN относительно этого. Здесь у вас есть еще одна ссылка с практическим кейсом .

EDIT:

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

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

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

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

...