create table Train_Types
(
id int not null primary key,
name varchar(50) not null
)
create table Trains
(
id int not null primary key,
name varchar(50) not null,
trainTypeId int not null foreign key references Train_Types(id)
)
create table Stations
(
id int not null primary key,
name varchar(50) not null
)
create table Routs
(
id int not null primary key,
name varchar(50) not null,
trainId int not null foreign key references Trains(id)
)
create table Routes_Stations
(
stationId int not null foreign key references Stations(id),
routeId int not null foreign key references Routs(id),
arrivalDate datetime not null,
departureDate datetime not null
)
create procedure addStation @stationId int, @routeId int, @arrivalTime datetime,
@departureTime datetime
as
begin
insert into Routes_Stations (stationId,routeId,arrivalDate,departureDate)
values (@stationId, @routeId, @arrivalTime, @departureTime)
end
go
所以在这里我基本上有一个列车时刻表数据库。我试图制作一个接收车站,路线,到达时间和出发时间的程序,并将这个新站点添加到路线中。我的问题是,当我写这个
exec addStation 1,4,'18:00','18:05'
我收到此错误:
消息547,级别16,状态0,过程addStation,第5行
INSERT语句与FOREIGN KEY约束“FK__Routes_St_ stati _1DE57479”冲突。冲突发生在数据库“Train Schedule”,表“dbo.Stations”,列'id'。
我不明白它的意思。有人可以帮我修复它,请我是数据库的新手
现在我解决了我的问题,我尝试修改这个程序,这样如果我要插入的工作站已经存在,我只需更新到达和离开时间。到目前为止我写了这个,但我卡住了,我不知道如何分配总nr。站到变量。
create procedure addStation @stationId int, @routeId int, @arrivalTime datetime,
@departureTime datetime
as
begin
declare @isStation_inRoute int
set @isStation_inRoute = 0
select *from Routes_Stations where stationId = @stationId
and routeId = @routeId
@isStation_inRoute = count(*)
insert into Routes_Stations (stationId,routeId,arrivalDate,departureDate)
values (@stationId, @routeId, @arrivalTime, @departureTime)
end
go
答案 0 :(得分:3)
错误说明:您试图在引用的dbo.Routes_Stations
中向StationId
插入一行,其中dbo.Stations
的值不存在父表。
您似乎正在尝试插入stationId = 1
值 - 并且从错误判断,Station
值Id
不存在。
此行为是外键约束的全部内容:您无法插入与FK关系不匹配的数据。那些将是“鬼记录”,指向不存在的站点的路线。您需要确保只在外键列中插入有效值!