Tengo la siguiente consulta usando la misma base de datos de mi post anterior:
https://foro.elhacker.net/bases_de_datos/ayuda_con_una_consulta_usando_procedimientos_almacenados-t493882.0.html
Realizar un procedimiento almacenado que reciba como parámetro Fecha de Entrada, Fecha de Salida. Consultar la disponibilidad de todas las habitaciones en el rango de fechas solicitado.
Presentar: IdHabitación - Tipo de Habitación, Estado.
Ejemplo:
Entrada
Fecha de Entrada: 2019-03-14
Fecha de Salida: 2019-03-20
Ejecución
IdHabitación Tipo de Habitación Estado
1 Deluxe Disponible
2 Deluxe Disponible
3 Turística Reservado
4 Presidencial Disponible
.. ..... .....
.. ..... .....
Nota: Con que exista un día ocupado en la habitación en el rango solicitado, el estado será: Reservado.
Es bastante parecido a la consulta de mi post anterior, así que, decidí modificarla y en teoría funciona, pero por ejemplo, tengo 5 datos almacenados y este muestra 30 datos en la ejecución.
Adjunto mi código:
CREATE PROCEDURE SP_Disponibilidad2
@fecha_entrada DATE,
@fecha_salida DATE
AS BEGIN
DECLARE @ocupado INTEGER
DECLARE @tmp_table TABLE (
HabitacionID INT,
TipoHab varchar(80),
Estado VARCHAR(10)
)
WHILE ( @fecha_entrada <= @fecha_salida )
BEGIN
SET @ocupado = (
SELECT COUNT(*)
FROM habitacion_reserva hr
--INNER JOIN habitacion h ON hr.id_habitacion = h.no_habitacion
--INNER JOIN tipo_habitacion th ON th.cod_tipo = h.cod_tipo
WHERE @fecha_entrada BETWEEN fecha_entrada AND fecha_salida
)
IF ( @ocupado > 0 )
INSERT INTO @tmp_table
SELECT
h.no_habitacion,
th.nom_tipo,
'Reservado'
FROM habitacion_reserva hr
INNER JOIN habitacion h ON hr.id_habitacion = h.no_habitacion
INNER JOIN tipo_habitacion th ON th.cod_tipo = h.cod_tipo
--WHERE @fecha_entrada BETWEEN fecha_entrada AND fecha_salida
ELSE
INSERT INTO @tmp_table
SELECT
hr.id_habitacion,
th.nom_tipo,
'Disponible'
FROM habitacion_reserva hr
INNER JOIN habitacion h ON hr.id_habitacion = h.no_habitacion
INNER JOIN tipo_habitacion th ON th.cod_tipo = h.cod_tipo
--WHERE @fecha_entrada BETWEEN fecha_entrada AND fecha_salida
SET @fecha_entrada = DATEADD( DAY, 1, @fecha_entrada )
END
SELECT * FROM @tmp_table
END
/********************************/
EXECUTE SP_Disponibilidad2 '2019-07-20', '2019-07-25'
+--------------+------------+
| IdHabitacion| Estado |
+--------------+------------+
| 1 | Reservado |
| 2 | Reservado |
| 3 | Reservado |
| 4 | Disponible |
| 5 | Disponible |
| 1 | Disponible |
| ...30 | Disponible |
+------------+--------------+