MSG547 błąd

0

Witam. Po wpisaniu takiego kodu :

 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,
	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,
);

insert into dbo.Klient (Imie,Nazwisko,Nr_Karty_Kredyt,Firma,Ulica,Miasto,Kod,Nip,Telefon)
values 
	('Adam','Dembski','202132','Membro','Piasta','Warszawa','05-200','203456','502956432'),
	('Mateusz','Olio','201414','Kera','Krótka','Szczecin','02-212','903211','432693845'),
	('Jakub','Arel','345678','Agrio','Długa','Poznań','22-341','123456','456321894'),
	('Marek','Lipo','345387','Elwo','Szara','Wrocław','45-432','453679','202020201'),
	('Krzysiek','Arlo','438940','Akiro','Stara','Dębki','67-843','659042','303030303'),
	('Włodzimierz','Drawio','900008','Harel','Mała','Gdynia','54-098','432805','102030401'),
	('Alek','Liop','564876','Kroti','Warszawska','Gdańsk','09-872','250938','333444555'),
	('Łukasz','Gruby','120120','RO','Batorego','Zakopane','50-002','674362','509684090'),
	('Michał','Chudy','194780','Swaf','Lelewela','Rzeszów','25-843','106892','109824032'),
	('Bartosz','Cekliński','125678','Gral','Karciana','Lublin','24-643','190579','600070080'),
	('Jan','Kowalski','400123','Vito','Altanowa','Kraków','09-019','663463','111111111'),
	('Piotr','Nowak','500140','Agnes','Kielecka','Lublin','04-524','867683','222222222'),
	('Tomasz','Koza','563122','Archidom','Traugutta','Brwinów','00-010','267838','333333333'),
	('Adam','Cielo','456632','Sopol','Marii','Brzeg','01-323','153436','444444444'),
	('Daniel','Madej','567865','Dano','Gowalska','Cedynia','45-235','685352','555555555'),
	('Rafał','Żółtek','257843','Krewo','Staropolska','Chełm','52-567','743852','666666666'),
	('Patryk','Debus','146784','Mietr','Nowoursynowska','Gniezno','00-000','793454','777777777'),
	('Damian','Furtak','467832','Dogo','Wieloraka','Innowrocław','11-111','765254','888888888'),
	('Agata','Ciolo','426785','Polpos','Ślepa','Olsztyn','22-222','752462','999999999'),
	('Daria','Yolo','680780','Lol','Kangurów','Tłuszcz','33-333','268692','104129521')

insert into dbo.Samochod (Marka,Typ,Data_produkcji,Kolor,Poj_Silnika,Przebieg)
values
	('Ford','Sedan','2000','Biały','2.0','120000'),
	('Skoda','Sedan','2009','Srebrny','1.6','250000'),
	('Dacia','Kombi','2015','Żółty','1.2','130000'),
	('BMW','Sedan','2001','Czarny','4.4','40000'),
	('Mercedes','Limuzyna','2009','Biały','3.0','20000'),
	('Volvo','Sedan','2010','Brązowy','2.2','150000'),
	('Aston Martin','Sport','2014','Czarny','5.9','5000'),
	('Bentley','Hatch-back','2002','Czarny','6.0','1000'),
	('Land Rover','Coupe','1992','Czerwony','1.8','60000'),
	('Jeep','Pick-up','2012','Czarny','3.4','80000'),
	('Alfa Romeo','Kabriolet','2007','Niebieski','2.0','100000'),
	('Kia','Sedan','2010','Biały','1.6','105000'),
	('Mazda','Sport','2013','Szary','1.8','11000'),
	('Lotus','Sport','2015','Żółty','5.5','55000'),
	('Bugatti','Sport','2014','Czarny','6.0','68000'),
	('Honda','Sedan','2005','Brązowy','1.8','180000'),
	('Jaguar','Kabriolet','2011','Czarny','4.8','16000'),
	('Opel','Kombi','2004','Czarny','2.2','220000'),
	('Toyota','Kombi','2008','Szary','2.0','257000'),
	('Lexus','Sport','2012','Żółty','4.0','90000')

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')

insert into dbo.Pracownik (Imie,Nazwisko,Data_Zatrudnienia,Stanowisko,Pensja,Dodatek,Id_miejsce,Telefon)
values
	('Adam','Brzozowski','2012-02-02','Menadżer','5000','1000','1','111111111'),
	('Damian','Dembski','2014-04-07','Zastępca menadżera','4000','800','2','222222222'),
	('Bartosz','Kramel','2000-09-12','Kierownik','3500','700','3','333333333'),
	('Rafał','Konieczny','2001-01-01','Kierownik','3500','700','4','444444444'),
	('Diana','Cieślak','2002-02-02','Księgowa','2800','560','5','555555555'),
	('Patryk','Madej','2003-03-03','Zastępca Prezesa','8000','1600','6','666666666'),
	('Patrycja','Klaga','2004-04-04','Asystentka','2200','440','7','777777777'),
	('Mateusz','Naraga','2005-05-05','Sprzedawca','2500','500','8','888888888'),
	('Daniel','Śmirewicz','2006-06-06','Sprzedawca','2500','500','9','999999999'),
	('Piotr','Nowak','2007-07-07','Mechanik','3000','600','10','523575273'),
	('Laura','Kowalska','2008-08-08','Księgowa','2800','560','11','652578292'),
	('Agata','Wójcik','2009-09-09','Recepcjonistka','2000','400','12','658037231'),
	('Karol','Dąbrowski','2010-01-02','Mechanik','3000','600','13','462314682'),
	('Krzysztof','Dudek','2001-09-05','Stażysta','1000','0','14','572525890'),
	('Kazimierz','Adamczuk','2005-07-22','Asystent mechanika','1800','360','15','144246653'),
	('Albert','Nowicki','2005-01-29','Elektryk','3000','600','16','168567893'),
	('Norbert','Zając','2003-01-05','Mechanik','3000','600','17','468237924'),
	('Katarzyna','Wieczorek','2004-01-15','Recepcjonistka','2000','400','18','522578146'),
	('Mateusz','Jaworski','2008-03-04','Mechanik','3000','600','19','157854677'),
	('Daria','Pawlak','2009-09-06','Sprzątaczka','1600','320','20','665544332')

insert into dbo.Wypozyczenie (ID_Klienta,ID_Samochod,ID_Pracownia_wyp,ID_Pracow_Odd,ID_Miejsce_Wyp,ID_Miejsca_Odd,Data_Wyp,Kaucja,Cena_jedn)
values
	('1','20','1','20','1','20','2012-02-04','400','1200'),
	('2','19','2','19','2','19','2009-09-12','200','600'),
	('3','18','3','18','3','18','2006-09-23','200','600'),
	('4','17','4','17','4','17','2013-03-01','400','1200'),
	('5','16','5','16','5','16','2007-05-21','200','600'),
	('6','15','6','15','6','15','2015-01-05','2000','6000'),
	('7','14','7','14','7','14','2015-04-03','1500','4500'),
	('8','13','8','13','8','13','2014-05-06','500','1500'),
	('9','12','9','12','9','12','2010-12-06','400','1200'),
	('10','11','10','11','10','11','2008-09-06','300','900'),
	('11','10','11','10','11','10','2012-10-11','800','2400'),
	('12','9','12','9','12','9','2010-05-09','1000','3000'),
	('13','8','13','8','13','8','2006-02-23','1500','4500'),
	('14','7','14','7','14','7','2015-02-08','1500','4500'),
	('15','6','15','6','15','6','2011-05-01','500','1500'),
	('16','5','16','5','16','5','2010-08-29','1000','3000'),
	('17','4','17','4','17','4','2006-01-25','800','2400'),
	('18','3','18','3','18','3','2015-06-01','300','900'),
	('19','2','19','2','19','2','2010-10-03','200','600'),
	('20','1','20','1','20','1','2008-09-22','300','900')
GO

	
create view Miejsce_Warszawa as (
select * 
from [dbo].[Miejsce]
where [Miasto] = 'Warszawa')
go

create view Czarny_Samochod as (
select [ID_Samochod],[Marka],[Typ],[Data_produkcji]
from [dbo].[Samochod]
where [Kolor] = 'Czarny'
group by [ID_Samochod],[Marka],[Typ],[Data_produkcji])
go

create view Klienci_A as (
select top 4 *
from [dbo].[Klient]
where [Nazwisko] like 'A%')
go

create view Cena_jedn_Samochodu_2000 as (
select [ID_Samochod],[Data_Wyp]
from [dbo].[Wypozyczenie]
where [Cena_jedn] >= '2000')
go

create view Pracownik_Kierownik as (
select *
from [dbo].[Pracownik]
where [Stanowisko] = 'Kierownik')
go

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

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

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

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

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

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

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

UPDATE [dbo].[Klient] SET [Nr_Karty_Kredyt]= '333333' WHERE [Nr_Karty_Kredyt] = '202132';
UPDATE [dbo].[Miejsce] SET [Numer] = '44' WHERE [Numer] = '21';
UPDATE [dbo].[Pracownik] SET [Stanowisko] = 'Asystentka' WHERE [Stanowisko] = 'Recepcjonistka';
UPDATE [dbo].[Samochod] SET [Przebieg] = [Przebieg] * 1.5 WHERE [Przebieg] >= '90000';
UPDATE [dbo].[Wypozyczenie] SET [Cena_jedn] = [Cena_jedn] + 100 WHERE [Cena_jedn] > '900';

Wszystko działa ale gdy chcę dodać :

DELETE FROM [dbo].[Klient]
WHERE [ID_Klienta]= '5'; 

Wyskakuje mi taki błąd :

Msg 547, Level 16, State 0, Line 1
The DELETE statement conflicted with the REFERENCE constraint "FK_Wypozyczenie_Klient". The conflict occurred in database "ffff", table "dbo.Wypozyczenie", column 'ID_Klienta'.
The statement has been terminated.

Nie mam pojęcia co z tym zrobić. Pomoże ktoś?

1

Najpierw musisz usunąć wszystkie wpisy o wypożyczeniach przez danego klienta
Jeżeli chcesz usunąć z bazy całą historię wypożyczeń przy usuwaniu klienta (raczej nigdy się tak w rzeczywistości nie robi) to na kluczu obcym musisz ustawić CASCADE na zdarzeniu ON DELETE
Zazwyczaj w ogóle nie usuwa się wpisów z bazy tylko oznacza jako archiwalne

1

Usuń najpierw wypożyczenie tego klienta, a potem samego klienta.

1

Cześć,
Problemem jest to , że próbujesz usunąć rekord z tabeli klient-ale jest powiązanie klucz główny-klucz obcy między tabelami klient i wypożyczenie.
W tabeli wypożyczenie istnieje wiersz w którym id_klient=5(klucz obcy) jeżeli SQL SERVER pozwolił by Ci usunąć z tabeli klient klienta o id=5, wtedy spójność danych nie została by zachowana.W kolumnie która jest kluczem obcym mogą występować tylko te wartości, które występują w kolumnie która jest kluczem głównym.Ty byś usunął z klucza głównego klienta o id=5 i w tym momencie w wypożyczeniu(kluczu obcym) istniała by wartość która nie istnieje w kluczu głównym do którego klucz obcy się odnosi.

Pozdrawiam

1

Tabela Wypozyczenie ma klucz obcy do tabeli Klient. I ma wiersz, w którym ID_Klienta wynosi 5. A właśnie taki wiersz próbujesz usunąć z tabeli Klient. Czyli chcesz usunąć wiersz do którego odwołuje się tabela Wypozyczenie. Ponieważ ID_Klienta w tej tabeli ma NOT NULL w definicji to czeka cię usunięcie najpierw wszystkich wierszy z tabeli Wypozyczenie, które mają ID_Klienta równe 5.

0

Dziękuję wszystkim. Pomogło i działa świetnie.

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