Добавление внешнего ключа, 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)
Я близок к правильному пути?
Ответы
Ответ 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