【发布时间】:2016-01-18 17:13:45
【问题描述】:
CREATE PROCEDURE AVAILABILITY
AS
DECLARE @check_in AS DATETIME
DECLARE @check_out AS DATETIME
SELECT room_id,room_type
FROM room
WHERE room_id NOT IN
(
SELECT room_id
FROM reservation B
JOIN RoomReservation RB
ON B.r_id = RB.r_id
WHERE (check_in <= @check_in AND check_out >= @check_in)
)
GO
Exec AVAILABILITY
create table room(
room_id varchar(5) not null,
room_price varchar(7) not null,
room_type varchar(10) NOT NULL CHECK (room_type IN('Single', 'Deluxe', 'Superior')),
occupied BIT DEFAULT 0 not null,
constraint Room_PK primary key(room_id)
)
create table reservation(
c_id varchar(5) ,
--room_id varchar(5) ,
r_id varchar(5) not null,
e_id varchar(5),
check_in date not null,
check_out date null,
constraint R_PK primary key(r_id),
constraint R_FK foreign key(c_id) references customer,
constraint R_FK1 foreign key(e_id) references employ,
--constraint RM_FK foreign key(room_id) references room
)
create table RoomReservation(
room_id varchar(5),
r_id varchar(5),
constraint RR_FK foreign key(room_id) references room,
constraint RoomR_FK1 foreign key(r_id) references reservation
)
insert into RoomReservation(r_id,room_id)
values --('T1','A1'),
-- ('T2','A2'),
-- ('T3','A3'),
-- ('T4','A4'),
-- ('T5','A3'),
-- ('T6','B11'),
-- ('T7','B12'),
-- ('T8','A4'),
-- ('T9','A5'),
-- ('T10','A1'),
-- ('T11','A7'),
-- ('T12','C25')
insert into customer(c_id,phone,name,CNIC,m_id)
values--('C01','0418814342','saad','3330195894431','M01'),
--('C02','0418814212','shahbaz','3330195894432','M02'),
--('C03','0418814111','feroz','3330195894433',Null),
--('C04','0418814222','serene','3330195894434','M03'),
('C05','0418814333','zoe','3330195894435',Null),
-- ('C06','0418814444','aslam','3330195894436',Null),
-- ('C07','0418814555','saleem','3330195894437','M04'),
-- ('C08','0418814666','zia','3330195894438',Null),
-- ('C09','0418814777','sami','3330195894439',Null),
--('C10','0418814888','usman','3330195894430',Null)
select * from customer
insert into room(room_id,room_price,room_type,occupied)
values('A1','2000','deluxe',1),
('A2','2000','deluxe',1),
('A3','4000','superior',0),
('A4','5000','single',0),
('A5','2000','deluxe',1),
('A6','2000','deluxe',1),
('A7','4000','superior',0),
('A8','5000','single',0),
('A9','2000','deluxe',1),
('A10','4000','superior',0),
('B11','5000','single',0),
('B12','5000','single',0),
('B13','2000','deluxe',1),
('B14','4000','superior',0),
('B15','5000','single',0),
('B16','5000','single',0),
('B17','5000','single',0),
('B18','2000','deluxe',1),
('B19','2000','deluxe',1),
('B20','4000','superior',0),
('C21','4000','superior',0),
('C22','5000','single',0),
('C23','2000','deluxe',1),
('C24','4000','superior',0),
('C25','2000','deluxe',1)
select * from room
insert into reservation(c_id,r_id,e_id,check_in,check_out)
values--('C01','T1','E0001','1-17-2015','1-18-2015'),
--('C01','T3','E0001','2-2-2015','2-6-2015'),
--('C02','T4','E0001','3-12-2015','3-15-2015'),
('C03','T5','E0002','3-12-2015','3-15-2015'),
('C03','T6','E0001','3-15-2015','3-17-2015'),
('C05','T7','E0003','3-17-2015','3-18-2015'),
('C06','T8','E0001','3-17-2015',Null),
('C07','T9','E0003','3-19-2015','3-20-2015'),
('C08','T10','E0001','4-12-2015','4-13-2015'),
('C09','T11','E0003','4-13-2015','4-14-2015'),
('C10','T12','E0001','4-14-2015','4-20-2015')
相反,它返回酒店中的所有房间列表,而不是指定日期内的可用房间。我曾多次尝试编写一个程序或触发器来将房间的占用列从 0 更新为 1,从 1 更新为 0,但我所有的尝试都失败了。 编辑: 好的,上面已经解决了。 我有三个实体,ROOM、ROOMRESERVATION、RESERVATION。 如何在房间被预订后更新被占用状态为 1,在不再被保留时更新为 0。
【问题讨论】:
-
也许你应该使用 check_out 参数而不是使用 check_in 两次。
-
我开始尝试帮助您解决问题,但您的代码无法运行。建表脚本缺失、部分示例数据被注释掉等
标签: sql sql-server select