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

Добавление внешнего ключа, SQL SERVER 2008

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

В ссылочной таблице "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)

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

Ex: Randy Bing вводит "Я люблю SQL", его ID равен 1, f_Name - Randy, 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)

Я близок к правильному пути?

4b9b3361

Ответ 1

Эта ошибка обычно означает, что типы данных различаются между "комментариями" и "личностью", если это фактическое сообщение

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.

Ответ 2

В обозревателе объектов подключитесь к экземпляру 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