Código
CREATE DATABASE Hotel GO USE Hotel; GO CREATE TABLE tipo_habitacion( cod_tipo INTEGER PRIMARY KEY, nom_tipo VARCHAR(25) NOT NULL, precio money NOT NULL ); CREATE TABLE habitacion( no_habitacion INTEGER PRIMARY KEY, cod_tipo INTEGER FOREIGN KEY REFERENCES tipo_habitacion(cod_tipo), descr VARCHAR(60), cap INTEGER NOT NULL, stat VARCHAR(15) ); CREATE TABLE cliente( id_cliente INTEGER PRIMARY KEY IDENTITY(0,1), p_nom VARCHAR(15), s_nom VARCHAR(15), p_apell VARCHAR(15), s_apell VARCHAR(15), direccion VARCHAR(70), tel VARCHAR(10), correo VARCHAR(25) ); CREATE TABLE empleado( id_empleado INTEGER PRIMARY KEY IDENTITY(0,1), p_nom VARCHAR(15), s_nom VARCHAR(15), p_apell VARCHAR(15), s_apell VARCHAR(15), direccion VARCHAR(70), tel VARCHAR(10), correo VARCHAR(25) ); CREATE TABLE reserva( id_reserva INTEGER PRIMARY KEY IDENTITY(0,1), id_cliente INTEGER FOREIGN KEY REFERENCES cliente(id_cliente), id_empleado INTEGER FOREIGN KEY REFERENCES empleado(id_empleado), fecha_reserva DATE NOT NULL, forma_pago VARCHAR(15), divisa VARCHAR(3), stat VARCHAR(15) ); CREATE TABLE habitacion_reserva( id_hab_reserva INTEGER PRIMARY KEY IDENTITY(0,1), id_habitacion INTEGER FOREIGN KEY REFERENCES habitacion(no_habitacion), id_reserva INTEGER FOREIGN KEY REFERENCES reserva(id_reserva), fecha_entrada DATE NOT NULL, fecha_salida DATE NOT NULL, precio money ); CREATE TABLE huesped( id_huesped INTEGER PRIMARY KEY IDENTITY(0,1), p_nom VARCHAR(15), s_nom VARCHAR(15), p_apell VARCHAR(15), s_apell VARCHAR(15), direccion VARCHAR(70), tel VARCHAR(10), nacionalidad VARCHAR(25), correo VARCHAR(25) ); CREATE TABLE huesped_hab_reserva( id_huesped INT FOREIGN KEY REFERENCES huesped(id_huesped) NOT NULL, id_hab_reserva INT FOREIGN KEY REFERENCES habitacion_reserva (id_hab_reserva) NOT NULL ); ALTER TABLE huesped_hab_reserva ADD PRIMARY KEY(id_huesped, id_hab_reserva); CREATE TABLE servicio( id_servicio INTEGER PRIMARY KEY IDENTITY(0,1), descr VARCHAR(60), precio money ); CREATE TABLE cargos_servicios( id_servicio INT FOREIGN KEY REFERENCES servicio (id_servicio) NOT NULL, id_hab_reserva INT FOREIGN KEY REFERENCES habitacion_reserva (id_hab_reserva) NOT NULL, precio money ); ALTER TABLE cargos_servicios ADD PRIMARY KEY(id_servicio, id_hab_reserva);
El problema es el siguiente:
Realizar un procedimiento almacenado que reciba como parámetro: ID Habitación, Fecha de Entrada, Fecha de Salida.
Consultar la disponibilidad de la habitación en cuanto a las fechas solicitadas mediante un estado.
Ejemplo:
Entrada
IdHabitación: 2
Fecha de Entrada: 2019-03-14
Fecha de Salida: 2019-03-20
Ejecución
Fecha Estado
2019-03-14 Disponible
2019-03-15 Disponible
2019-03-16 Disponible
2019-03-17 Disponible
2019-03-18 Disponible
2019-03-19 Disponible
2019-03-20 Salida
En caso que exista una reserva en los días solicitados el estado será: "Reservado". El estado del último día debe ser: "Salida" y no ocupa implica una reserva.
Llevo atascado en eso desde hace varios días, y lo último que pude hacer fue esto:
Código
CREATE PROCEDURE Disponibilidad @FechaEntrada DATE, @FechaSalida DATE, @IdHabitación INT AS SELECT hr.fecha_entrada, r.stat AS Estado FROM habitacion_reserva hr INNER JOIN reserva r ON r.id_reserva = hr.id_reserva INNER JOIN habitacion h ON h.no_habitacion = hr.id_habitacion WHERE r.fecha_reserva NOT BETWEEN @FechaEntrada AND @FechaSalida AND hr.id_habitacion = @IdHabitación EXEC Disponibilidad '2019-04-01', '2019-04-10', 2
Y obviamente está incorrecto, así que, espero que sean de gran ayuda ya que la resolución de ese problema es de 'vida o muerte'