MSG547 błąd TSQL

0

Witam. Po wpisaniu swojego kodziku wyskakuje mi takie błąd :

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Miejsce_Wypozyczenie". The conflict occurred in database "gfsdfg", table "dbo.Wypozyczenie", column 'ID_Miejsce_Wyp'.

Poniżej wstawiam kod :

CREATE TABLE dbo.Wypozyczenie
(
	ID_Wypozyczenie int IDENTITY(1,1) PRIMARY KEY,
	ID_Klienta int unique not null,
	ID_Samochod int unique NOT NULL,
	ID_Pracownia_wyp int unique NOT NULL,
	ID_Pracow_Odd int unique NOT NULL,
	ID_Miejsce_Wyp int unique NOT NULL,
	ID_Miejsca_Odd int unique NOT NULL,
	Data_Wyp date NOT NULL,
	Kaucja decimal NOT NULL,
	Cena_jedn decimal NOT NULL, 
);

CREATE TABLE dbo.Samochod
(
	ID_Samochod int IDENTITY(1,1) PRIMARY KEY,
	Marka varchar(30) NOT NULL,
	Typ varchar(30) NOT NULL,
	Data_produkcji date NOT NULL,
	Kolor varchar(30) NOT NULL,
	Poj_Silnika float NOT NULL,
	Przebieg decimal NOT NULL, 
);

CREATE TABLE dbo.Klient
(
	ID_Klienta int IDENTITY(1,1) PRIMARY KEY,
	Imie varchar(30) not null,
	Nazwisko varchar(30) not null,
	Nr_Karty_Kredyt int not null,
	Firma varchar(30) not null,
	Ulica varchar(30) not null,
	Miasto varchar(30) not null,
	Kod varchar(30) not null,
	Nip int not null,
	Telefon int not null
);

CREATE TABLE dbo.Pracownik
(
	ID_Pracownika int IDENTITY(1,1) PRIMARY KEY,
	Imie varchar(30) not null,
	Nazwisko varchar(30) not null,
	Data_Zatrudnienia date not null,
	Dzial varchar(30) not null,
	Stanowisko varchar(30) not null,
	Pensja money not null,
	Dodatek money not null,
	Id_miejsce int unique not null,
	Telefon int not null,
);


CREATE TABLE dbo.Miejsce
(
	ID_Miejsce int IDENTITY(1,1) PRIMARY KEY,
	Ulica varchar(30) not null,
	Numer int not null,
	Miasto varchar(30) not null,
	Kod varchar(30) not null,
);

ALTER TABLE  [dbo].[Klient]
ADD CONSTRAINT FK_Klient_Wypozyczenie FOREIGN KEY([ID_Klienta])
REFERENCES [dbo].[Wypozyczenie] ([ID_Klienta])

ALTER TABLE [dbo].[Samochod]
ADD CONSTRAINT FK_Samochod_Wypozyczenie FOREIGN KEY([ID_Samochod])
REFERENCES [dbo].[Wypozyczenie] ([ID_Samochod])

ALTER TABLE [dbo].[Pracownik]
ADD CONSTRAINT FK_Pracownik_Wypozyczenie FOREIGN KEY([ID_Pracownika])
REFERENCES [dbo].[Wypozyczenie] ([ID_Pracownia_wyp])

ALTER TABLE [dbo].[Pracownik]
ADD CONSTRAINT FK_Pracownik_Wypozyczenie2 FOREIGN KEY([ID_Pracownika])
REFERENCES [dbo].[Wypozyczenie] ([ID_Pracow_Odd])

ALTER TABLE [dbo].[Miejsce]
ADD CONSTRAINT FK_Miejsce_Wypozyczenie FOREIGN KEY([ID_Miejsce])
REFERENCES [dbo].[Wypozyczenie] ([ID_Miejsce_Wyp])

ALTER TABLE [dbo].[Miejsce]
ADD CONSTRAINT FK_Miejsce_Wypozyczenie2 FOREIGN KEY([ID_Miejsce])
REFERENCES [dbo].[Wypozyczenie] ([ID_Miejsca_Odd])

ALTER TABLE [dbo].[Miejsce]
ADD CONSTRAINT FK_Miejsce_Pracownik FOREIGN KEY([ID_Miejsce])
REFERENCES [dbo].[Pracownik] ([Id_miejsce])

insert into dbo.Miejsce (Ulica,Numer,Miasto,Kod)
values
	('Piasta','21','Warszawa','05-120'),
	('Zatoczna','56','Poznań','55-555'),
	('Piłsudskiego','79','Olsztyn','01-412'),
	('Marszałkowska','24','Gdańsk','46-352'),
	('Graniczna','67','Katowice','15-562'),
	('Zimna','242','Wrocław','15-524'),
	('Stara','46','Warszawa','05-120'),
	('Cicha','89','Gdynia','56-221'),
	('Klacza','90','Szczecin','14-232'),
	('Traugutta','24','Inowrocław','44-444'),
	('Lelewela','59','Ząbki','55-555'),
	('Wiatraczna','11','Łódź','66-666'),
	('Smażyńskiego','22','Tłuszcz','77-777'),
	('Czysta','33','Ursus','11-451'),
	('Paderewskiego','44','Pruszków','44-146'),
	('Łukasińskiego','55','Brwinów','61-571'),
	('Mała','66','Suwałki','14-458'),
	('Poniatowskiego','88','Dąbki','00-000'),
	('Mickiewicza','77','Warszawa','05-120'),
	('Kopernika','99','Warszawa','05-120')

 

Pomoże ktoś? Będę wdzięczny.

0

Czy FK nie powinny być zdefiniowane w druga stronę?

CREATE TABLE Nazwa_tabeli
(
kolumna1 TYP,

kolumnaN TYP,

CONSTRAINT nazwa_klucza_obcego
FOREIGN KEY (nazwa_kolumny_z_tworzonej_tabeli)
REFERENCES tabela_referencyjna (kolumna_tabeli_referencyjnej)
)
za https://msdn.microsoft.com/pl-pl/library/encyklopedia-sql--klucze-obce--foreign-key.aspx

Czyli zamiast
ALTER TABLE [dbo].[Miejsce]
ADD CONSTRAINT FK_Miejsce_Wypozyczenie FOREIGN KEY([ID_Miejsce])
REFERENCES [dbo].[Wypozyczenie] ([ID_Miejsce_Wyp])

Tak:
ALTER TABLE [dbo].[Wypozyczenie]
ADD CONSTRAINT FK_Miejsce_Wypozyczenie FOREIGN KEY([ID_Miejsce_Wyp])
REFERENCES [dbo].Miejsce

0

No dobra. Najpierw tworzysz tabele. No to one w tym momencie nie mają jeszcze rekordów. Potem do jednej z nich chcesz dodać rekordy. Ale ta tabela ma klucz obcy. Czyli wartość dopisywana musi być w drugiej tabeli, tej, do której klucz obcy się odnosi. A tam przecież jeszcze nic nie ma. Czyli tam nie ma dopisywanej tu wartości. Zresztą dokładnie o tym mówi ten komunikat.

0

Dziękuję Wam obu. Teraz wszystko działa poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1