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:
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 |
+------------+--------------+