实体会议室和预订
Room = Room_id,Rtype,已占用(位列)
预订= Res_id,Room_id,CheckinDate,CheckoutDate。
如果在预订表中保留一个房间时,如何将占用位列更新为1?我认为它是一个触发器。但是如何?代码片段,因为我是新手。
有人建议使用结帐日期为Null。如果为null,则将Occupied更新为1。 帮助!!
答案 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])
只需在声明中输入所需的日期即可。