SQL Server: невозможно создать связь - PullRequest
1 голос
/ 13 февраля 2012

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

  • Address таблица успешно сохранена
  • Personal стол

Невозможно создать связь 'FK_Personal_Address'.
Каскадный внешний ключ 'FK_Personal_Address' не может быть создан там, где ссылка на столбец «Personal.ID» является столбцом идентификации. Не могла создать ограничение. Смотрите предыдущие ошибки.

Ответы [ 5 ]

5 голосов
/ 13 февраля 2012

Первичный ключ в таблице Person, по-видимому, является идентификатором.Это целочисленное поле с автоинкрементным увеличением.

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

Пример:

INSERT person (firstname, lastname) VALUES ('John', 'Smith')

Это будетвставьте новую запись о человеке, и поле personid будет заполнено автоматически, потому что это поле IDENTITY.

Теперь, чтобы вставить адрес Джона Смита, вам нужно знать его personid.Например:

-- Say, for example, personid of John Smith is 55
INSERT address (personid, street, city) VALUES (55, 'High Street', 'London')

Таким образом, в таблице person personid генерируется автоматически, но в таблице address вы указываете значение, соответствующее существующему человеку.В этом весь смысл внешнего ключа.

Без дополнительной информации о вашей схеме трудно угадать проблему.

2 голосов
/ 28 сентября 2015

Я следил за идентичностью, int и первичным ключом, рассмотренным в ответе выше. Тем не менее, я все еще получал ту же ошибку.

'xReason' table saved successfully
'xAddress' table
- Unable to create relationship 'FK_xAddress_xReason'.  
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xAddress_xReason". The conflict occurred in database "databaseName", table "dbo.xReason", column 'xReasonID'.

Эта ошибка устранена, когда я вставил некоторые данные в Reason table. (таблица с первичным ключом)

Если вы прочитали это далеко, это может быть вашей проблемой.

1 голос
/ 13 февраля 2012

похоже, что вы пытаетесь создать внешний ключ для Personal.ID, связанный с самим собой.

Возможно, вы захотите сделать что-то вроде:

ALTER TABLE Adress  WITH NOCHECK ADD  CONSTRAINT [FK_Adress_Personnal] FOREIGN KEY(Personal_Id)
REFERENCES Personal (ID)
1 голос
/ 13 февраля 2012

Не видя структуру таблиц в вопросе, я полагаю, что наиболее вероятной причиной является столбец в вашей дочерней таблице (адрес), помеченный как столбец идентификаторов.В отношении внешнего ключа родительский элемент определяет значение поля, а не дочерний.Столбец может быть PK в дочерней таблице, но не Identity.

0 голосов
/ 11 марта 2013

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

...