酒店预订被占用的房间查询Sql Server

时间:2016-01-17 13:40:35

标签: sql sql-server

实体会议室预订

Room = Room_id,Rtype,已占用(位列)

预订= Res_id,Room_id,CheckinDate,CheckoutDate。

如果在预订表中保留一个房间时,如何将占用位列更新为1?我认为它是一个触发器。但是如何?代码片段,因为我是新手。

有人建议使用结帐日期为Null。如果为null,则将Occupied更新为1。 帮助!!

2 个答案:

答案 0 :(得分:0)

select checkoutdate from Reservation;

将checkoutdate放在变量上。

if checkoutdate == null then
update Room set occupied = 1;

答案 1 :(得分:0)

使用像您所拥有的静态展示位置字段这样的问题是,该值会根据您正在审核的日期而发生变化。例如:A房间现在没人住,但是从现在起两天后保留3晚,如果您将Occupied字段更改为1,那么如果有人试图在今天办理登机手续,它将错误地显示为已占用。

当房间不使用时,您还会遇到将占用字段更改回0的问题 - 这会产生超出必要的工作量。

正如评论中所提到的,最好不要使用Occupied字段,而是创建将在房间可用时显示的查询。查询可以根据您的需要而变化,下面是一个示例查询,它创建一个存储过程,可用于在日期范围内查找可用的房间:

CREATE PROCEDURE CheckRoomAvailability
    @NewCheckInDate DATETIME
    @NewCheckOutDate DATETIME
AS

SELECT r.Room_ID, r.Rtype
FROM room AS r
INNER JOIN reservation as re
ON r.room_id = re.room_id
WHERE
    (@NewCheckINDate < re.CheckinDate 
    OR
    @NewCheckInDate > re.CheckoutDate)
    AND
    (@NewCheckOutDate < re.CheckinDate 
    OR
    @NewCheckOutDate > re.CheckoutDate)
GO

然后执行此存储过程:

EXEC CheckRoomAvailability([Check-In Date],[Check-Out Date])

只需在声明中输入所需的日期即可。