好的,我需要一点存储过程的帮助,这有点过头了,我不知道该怎么办。 SP用于我正在进行的项目中的搜索功能。它是根据最终用户的选择找到可用的座位。用户应该能够根据以下内容进行搜索:
离境机场(或“任何”)
抵达机场(或“任何”)
最早的出发时间
最新离开时间
可用的最小席位
要返回的最大航班
我最初认为单独的SELECT语句可以解决这个问题,但正如您可能知道的那样,select语句被视为单独的查询,并且返回产生了6种不同的返回。所以,我试图将它们包含在一个SELECT中,但我的逻辑必须是棘手的,因为返回有问题。如果有人能指出我正确的方向,我将非常感激。代码如下:
ALTER PROCEDURE [dbo].[usp_FindSeats]
(
@DepartureAirport char(3),
@ArrivalAirport char(3),
@EarliestDepTime datetime,
@LatestDepTime datetime,
@minSeatsAvailable int,
@maxFlightsRequested int
)
AS
BEGIN
SELECT * FROM Flight
WHERE
(@DepartureAirport = UPPER('ANY') OR DepartAirport = @DepartureAirport)
AND
(@ArrivalAirport = UPPER('ANY') OR ArriveAirport = @ArrivalAirport)
AND
(DepartTime >= @EarliestDepTime)
AND
(DepartTime <= @LatestDepTime)
AND
(FlightSeatsAvailiable >= @minSeatsAvailable)
AND
((SELECT COUNT(FlightID) FROM Flight) <= @maxFlightsRequested)
--IF (@DepartureAirport = UPPER('ANY'))
--BEGIN
--(SELECT * FROM Flight WHERE DepartAirport != '')
--END
--ELSE
--SELECT * FROM Flight WHERE DepartAirport = @DepartureAirport
--IF (@ArrivalAirport = UPPER('ANY'))
--Begin
--(SELECT * FROM Flight WHERE ArriveAirport != '')
--END
--ELSE
--SELECT * FROM Flight WHERE ArriveAirport = @ArrivalAirport
--SELECT * FROM Flight WHERE DepartTime >= @EarliestDepTime
--SELECT * FROM Flight WHERE DepartTime <= @LatestDepTime
--SELECT * FROM Flight WHERE FlightSeatsAvailiable >= @minSeatsAvailable
--SELECT * FROM Flight WHERE (SELECT COUNT(FlightID) FROM Flight) <= @maxFlightsRequested
答案 0 :(得分:0)
如果我理解你的需要,最简单的方法是:
SELECT * FROM Flight 哪里 (@DepartureAirport = UPPER('ANY')或DepartAirport = @DepartureAirport) 联盟 SELECT * FROM Flight 哪里 (@ArrivalAirport = UPPER('ANY')或ArriveAirport = @ArrivalAirport) AUNION SELECT * FROM Flight 哪里 (DepartTime&gt; = @EarliestDepTime) 联盟 SELECT * FROM Flight 哪里 (DepartTime&lt; = @LatestDepTime) 联盟 SELECT * FROM Flight 哪里 (FlightSeatsAvailiable&gt; = @minSeatsAvailable) 联盟 SELECT * FROM Flight 哪里 ((SELECT COUNT(FlightID)FROM Flight)&lt; = @maxFlightsRequested)
这将根据用户的输入汇总所有结果。
答案 1 :(得分:0)
试试这个:
ALTER PROCEDURE [dbo].[usp_FindSeats]
(
@DepartureAirport char(3),
@ArrivalAirport char(3),
@EarliestDepTime datetime,
@LatestDepTime datetime,
@minSeatsAvailable int,
@maxFlightsRequested int
)
AS
SELECT TOP(@maxFlightsRequested) *
FROM Flight
WHERE (@DepartureAirport = 'any' OR DepartAirport = @DepartureAirport)
AND (@ArrivalAirport = 'any' OR ArriveAirport = @ArrivalAirport)
AND DepartTime >= @EarliestDepTime
AND DepartTime <= @LatestDepTime
AND FlightSeatsAvailiable >= @minSeatsAvailable
请注意,如果您限制返回的行数,那么以某种方式对结果进行排序可能是个好主意(ORDER BY)。