Проблема со ссылкой на внешний ключ, SQL Server - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблемы с пониманием того, как настроить ссылку на внешний ключ.Я пытаюсь сделать ссылку между таблицами Lägenheter и Arbetslista, чтобы одна строка в Lägenheter принадлежала многим строкам в Arbetslista.

Я создал такие таблицы, как:

CREATE TABLE Deltagare (
Deltagarnr int PRIMARY KEY,
Namn varchar(30),
Typ varchar(30)
);

CREATE TABLE Uppgifter (
Uppgift varchar(30) PRIMARY KEY,
Typ varchar(30),
Pris money
);

CREATE TABLE Arbetslista (
Deltagarnr int not null,
Datum date not null,
Uppgift varchar(30) not null, 
Lägenhetsnr int not null,

PRIMARY KEY (Deltagarnr, Datum, Uppgift),
FOREIGN KEY (Deltagarnr) REFERENCES Deltagare(Deltagarnr),
FOREIGN KEY (Uppgift) REFERENCES Uppgifter(Uppgift)
);

Тогда яимпортировать некоторые данные из файла .mdb во все три таблицы.После этого я добавляю еще одну таблицу:

CREATE TABLE Lägenheter(
lägenhetsnummer int PRIMARY KEY,
gatuadress varchar(30),
kvadrater int
);

Все работает нормально до последнего шага:

ALTER TABLE Arbetslista
ADD FOREIGN KEY (Lägenhetsnr) REFERENCES Lägenheter(lägenhetsnummer)
;

Здесь я получаю это сообщение об ошибке: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK__Arbetslis__Lägen__403A8C7D". The conflict occurred in database "Hushåll", table "dbo.Lägenheter", column 'lägenhetsnummer'.

После этого я также попытался удалить все данные из Arbetslista и затем снова выполнить упомянутый ALTER TABLE.Это работает, но затем я получаю сообщение об ошибке при попытке импортировать данные снова:

Hresult: 0x80004005 Description: "The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Arbetslis__Lägen__412EB0B6". The conflict occurred in database "Hushåll", table "dbo.Lägenheter", column 'lägenhetsnummer'.". (SQL Server Import and Export Wizard)

Почему это невозможно, когда другие внешние ключи работаютштраф?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

После импорта данных в Arbetslista столбец Lägenhetsnr был инициализирован до некоторого значения (скажем, XYZ). позже, при попытке добавить FOREIGN KEY в Arbetslista, SQL попытается выполнить это, однако он не может найти строку с первичным ключом lägenhetsnummer = XYZ, и оператор будет прерван. Я думаю, что лучше всего сначала создать таблицу 4, а затем очистить данные и попытаться импортировать их.

0 голосов
/ 13 ноября 2018

В таблице Arbetslista есть строки, для которых значение Lägenhetsnr не существует в поле lägenhetsnummer таблицы Lägenheter.Вы должны очистить существующие данные, чтобы иметь возможность создавать такой внешний ключ.

Проверьте свои данные, выполнив этот скрипт:

select * from Arbetslista a where not exists (select * from Lägenheter l where l.lägenhetsnummer = a.Lägenhetsnr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...