创建存储过程并声明外键

时间:2019-12-12 22:48:19

标签: sql-server stored-procedures foreign-keys primary-key

我正在为航空公司预订系统创建一个存储过程,该过程必须允许我添加具有有效飞机类型的新航班,不允许重复,目的城市和出发城市不能相同,并且总数预订的旅客默认为0。

我已经创建了两个关于plane和flight的表,并且在flight表中列出了飞机ID作为外键,但是我不确定如何从flight表上的飞机表中验证飞机类型。我应该使飞机类型成为外键吗? 下面是我的代码:

CREATE PROCEDURE Addnewflight @f_id int, @dep_city varchar(50), @dest_city varchar(50), @no numeric(12,2), @dt datetime, @total_passenger numeric(12,2)
AS
DECLARE @count INT;
SET @count= (SELECT COUNT(1) FROM dbo.flight where flight_id=@f_id)
IF @count=0 AND @dep_city<>@dest_city 
BEGIN
    INSERT INTO dbo.[flight]([flight_id],[departure city],[destination city],[number],[date],[total number of passengers]) VALUES(@f_id,@dep_city,@dest_city,@no,@dt,@total_passenger)
END
ELSE
BEGIN
    PRINT 'Duplicates are not allowed.  Destination and departure city cannot be the same.';
END

1 个答案:

答案 0 :(得分:0)

在您的存储过程中,为平面类型声明一个变量:

declare @plane_type varchar(max);

然后使用您的select语句(从上面的注释中获取)设置变量:

set @plane_type = (SELECT [Plane Type] FROM dbo.plane WHERE [Plane Type]=747)

(我在列名的周围加上了方括号,因为它看起来包含空格字符。)

然后在您的insert语句中,添加Plane Type:

INSERT INTO dbo.[flight]([flight_id],[plane type],[departure city],[destination city],[number],[date],[total number of passengers]) VALUES(@f_id,@plane_type,@dep_city,@dest_city,@no,@dt,@total_passenger)