Procedimiento almacenado que recibe como parámetros fecha de entrada y salida

Iniciado por S4ms3pi0l__, 24 Marzo 2019, 23:33 PM

0 Miembros y 1 Visitante están viendo este tema.

S4ms3pi0l__

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:

Código (sql) [Seleccionar]

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