Добавление внешнего ключа, SQL SERVER 2008 - PullRequest
27 голосов
/ 13 марта 2011

Я пытаюсь добавить внешний ключ в таблицу и выдает следующую ошибку:

В ссылочной таблице tbl_Person отсутствуют первичные ключи или ключи-кандидаты, которые соответствуют ссылкамсписок столбцов во внешнем ключе 'P_ID'.

У меня есть tbl_Person, который определяется как:

P_ID INT (Primary Key)
f_Name,
l_Name

другая таблица представляет собой таблицу комментариев, которая определяется как:

C_ID INT,
Comments,
P_ID (should be the foreign key)

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

Пример: Рэнди Бинг вводит «Я люблю SQL», его ID равен 1, f_Name - Рэнди, l_Name - Bing, его комментарии - «Я люблю Sql».Его комментарии должны хранить уникальный идентификатор, а также импортировать его P_ID.

Позже, когда Рэнди хочет добавить к комментарию тот же C_ID, где P_ID соответствует ему без создания нового C_ID.

Вот код:

ALTER TABLE tbl_Comments 
ADD CONSTRAINT P_ID
FOREIGN KEY (P_ID) 
REFERENCES tbl_Person(P_ID)

Я нахожусь на правильном пути?

Ответы [ 3 ]

76 голосов
/ 13 марта 2011

Эта ошибка обычно означает, что типы данных между «Комментариями» и «Лицом» различны, при условии, что это фактическое сообщение

SQL должен быть таким

ALTER TABLE tbl_Comments WITH CHECK ADD
 CONSTRAINT FK_Comments_Person FOREIGN KEY (P_ID) REFERENCES tbl_Person (P_ID)

Это соответствует тому, что выдобавлено.Итак:

  • проверьте типы данных оба int
  • убедитесь, что P_ID является первичным ключом для tbl_Person
  • (Edit, Dec 2011) сопоставления и длиныдолжно быть одинаковым и для столбцов varchar
4 голосов
/ 14 января 2015

В обозревателе объектов подключитесь к экземпляру компонента Database Engine.

На стандартной панели щелкните Новый запрос.

В этом примере создается внешний ключ для столбца TempID и ссылка на негоSalesReasonID в таблице Sales.SalesReason.

  USE AdventureWorks2012;
  GO
  ALTER TABLE Sales.TempSalesReason 
  ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) 
  REFERENCES Sales.SalesReason (SalesReasonID) 
  ON DELETE CASCADE
  ON UPDATE CASCADE
  ;
  GO
0 голосов
/ 12 февраля 2019

имя вашего ограничения, p_id, конфликтует с именем столбца p_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...