Hola.
Me explico.
Tengo el siguiente SP:
DECLARE @dias_i smallint
DECLARE @dias_v tinyint SET @dias_v = CASE @tipo WHEN 1 THEN 7 ELSE 0 END
DECLARE @acomodacion varchar(3)
DECLARE @com char(1)
DECLARE @sql varchar(1500)
SET @com = char(39)
IF (@internet = 1) AND (@linea IN (9, 10))
SET @acomodacion = 'C2'
ELSE
SET @acomodacion = ''
IF (@tipo = 1) AND (@internet = 1)
BEGIN
SET @dias_i = DATEDIFF(day, getDate(), @fecha)
SET @dias_i = CASE WHEN @dias_i > 7 THEN 7 ELSE @dias_i END
END
ELSE
SET @dias_i = CASE @tipo WHEN 1 THEN 7 ELSE 0 END
SET @sql = 'SELECT MIN(aco.plazas) AS plazas, MIN(aco.vacios) AS vacias,
aco_capacidad, aco_nombre, aco_siglas, grup_codi, grup_nombre,'
+ ' MAX(aco.cerrado) AS cerrado, MIN(aco.mts) AS metros, MIN(aco.pax) AS
pax, CONVERT(varchar, grup_fechsa, 103) AS grup_fechsa,'
+ ' grup_horasa, grup_horall, grup_fechsa AS orden,
MIN(iscomar.NUMEROCOCHES(vgr_codgrup, 0)) AS coches'
+ ' FROM (SELECT SUM(CASE nac_vacio WHEN 1 THEN nac_libres ELSE 0 END) AS
plazas, SUM(nac_vacio) AS vacios, nac_codaco,'
+ ' vgr_codgrup, via_cerrado AS cerrado, via_metdis AS mts, via_pax_disp
AS pax'
+ ' FROM ic_numaco INNER JOIN ic_viaje ON via_codi = nac_via_codi'
+ ' INNER JOIN ic_viagrup ON via_codi = vgr_codvia'
+ ' INNER JOIN ic_grupoviaje ON grup_codi = vgr_codgrup'
+ ' WHERE (grup_fechsa BETWEEN DATEADD(day, -' + cast(@dias_i as varchar)
+ ', ' + @com + cast(@fecha as varchar) + @com + ')'
+ ' AND DATEADD(day, ' + cast(@dias_v as varchar) + ', ' + @com +
cast(@fecha as varchar) + @com + ')) AND (grup_codlin = ' + cast(@linea as
varchar) + ')'
IF (@acomodacion <> '')
SET @sql = @sql + ' AND (nac_codaco <> ' + @com + @acomodacion + @com +
')'
SET @sql = @sql + ' GROUP BY nac_codaco, vgr_codgrup, via_cerrado,
via_metdis, via_pax_disp) aco'
+ ' INNER JOIN ic_grupoviaje ON grup_codi = aco.vgr_codgrup'
+ ' INNER JOIN ic_acomodaciones ON aco_siglas = aco.nac_codaco'
+ ' GROUP BY grup_codi, grup_nombre, grup_fechsa, grup_horasa,
grup_horall, aco_capacidad, aco_siglas, aco_nombre'
+ ' ORDER BY 14, grup_horasa, aco_siglas'
EXEC (@sql)
Antes lo tenía una consulta, pero pensé que sería mejor primero crear la
cadena y luego ejecutarla (¿buena idea?).
Ahora estoy mirando las vistas.
Una cosa: las tablas, tienen unas 200.000 filas, y crecen unas 100.000 al
año (sólo una tabla tiene más de 1.000.000 de filas).
Lo que decía: ahora estoy mirando si merece la pena crear una vista y que
el SP la utilize, pero no se la diferencia que hay entre una vista o
utilizar una consulta SQL. ¿no es lo mismo? (supongo que no, poruqe si no
no existirían las vistas).
Espero haberme explicado, pues soy muy malo en el uso del lenguaje.
Muchas gracias.
Leer las respuestas