Filtros SQL

20/10/2008 - 09:23 por Alhambra Eidos Desarrollo | Informe spam
Hola a todos,

tengo un procedimiento almacenado que tiene un filtro sobre una tabla.

Admite tres parámetros que pueden ser nulos o tener valor,

la consulta que tengo es:

SELECT L.IdAplicacion, L.IdUsuario, U.IdDelegacion, NombreFichero,
NumeroHojas, Fecha, IdTipoDocumental, IdOrigen, NumeroOperacion,
NumeroExpediente,
A.Descripcion as DescripcionAplicacion, U.Nombre as NombreUsuario ,
D.NombreDelegacion ,Resultado
FROM LogHistoricoIndexacion L
INNER JOIN Aplicaciones A ON L.IdAplicacion = A.ID_Aplicacion
INNER JOIN Usuarios U ON U.IdUsuario = L.IdUsuario
INNER JOIN Delegacion D ON D.IdDelegacion = U.IdDelegacion

WHERE
datepart(dayofyear,fecha) >= datepart(dayofyear,@FechaDesde) AND
datepart(dayofyear,fecha) <= datepart(dayofyear,@FechaHasta)

AND (L.IdAplicacion = @IdAplicacion or @IdAplicacion is null)
AND (U.IdDelegacion = @IdDelegacion or @IdDelegacion is null)
AND (U.IdUsuario = @IdUsuario or @IdUsuario is null)


Utilizando filtro de tipo AND (U.IdUsuario = @IdUsuario or @IdUsuario is
null) para los tres parámetros (IdAplicacion, IdDelegacion, IdUsuario)
están todos los casos cubiertos ??

Muchas gracias.


http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.com/churrosoft
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft
 

Leer las respuestas

#1 Maxi
20/10/2008 - 15:36 | Informe spam
Hola, es una forma! la que yo uso mas simple es

AND (L.IdAplicacion = isnull(@IdAplicacion,L.IdAplicacion )
AND (U.IdDelegacion = isnull(@IdDelegacion,U.IdDelegacion)
AND (U.IdUsuario = isnull(@IdUsuario,U.IdUsuario)

Otro detalle mas en tu query

WHERE
datepart(dayofyear,fecha) >= datepart(dayofyear,@FechaDesde) AND
datepart(dayofyear,fecha) <= datepart(dayofyear,@FechaHasta)




Esta parte no es nada performante, no cumple con SARG porque usas sentencias
del lado izquiero de los operadores y esto hara que si tienes un indice por
fecha lo usara pero de forma totalmente ineficiente



Salu2

Microsoft MVP SQL Server
Culminis Speaker
www.sqltotalconsulting.com

"Alhambra Eidos Desarrollo"
escribió en el mensaje
news:
Hola a todos,

tengo un procedimiento almacenado que tiene un filtro sobre una tabla.

Admite tres parámetros que pueden ser nulos o tener valor,

la consulta que tengo es:

SELECT L.IdAplicacion, L.IdUsuario, U.IdDelegacion, NombreFichero,
NumeroHojas, Fecha, IdTipoDocumental, IdOrigen, NumeroOperacion,
NumeroExpediente,
A.Descripcion as DescripcionAplicacion, U.Nombre as NombreUsuario ,
D.NombreDelegacion ,Resultado
FROM LogHistoricoIndexacion L
INNER JOIN Aplicaciones A ON L.IdAplicacion = A.ID_Aplicacion
INNER JOIN Usuarios U ON U.IdUsuario = L.IdUsuario
INNER JOIN Delegacion D ON D.IdDelegacion = U.IdDelegacion

WHERE
datepart(dayofyear,fecha) >= datepart(dayofyear,@FechaDesde) AND
datepart(dayofyear,fecha) <= datepart(dayofyear,@FechaHasta)

AND (L.IdAplicacion = @IdAplicacion or @IdAplicacion is null)
AND (U.IdDelegacion = @IdDelegacion or @IdDelegacion is null)
AND (U.IdUsuario = @IdUsuario or @IdUsuario is null)


Utilizando filtro de tipo AND (U.IdUsuario = @IdUsuario or @IdUsuario is
null) para los tres parámetros (IdAplicacion, IdDelegacion, IdUsuario)
están todos los casos cubiertos ??

Muchas gracias.


http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.com/churrosoft
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft

Preguntas similares