SQL Server 2005 - Duda con Stored Procedure

#1
Hola companieros bakas :D
El dia de hoy les traigo una duda que tengo con un SP que estoy diseniando. Tengo la necesidad de hacer un SP que genere una consulta para el llenado de un datagrid, pero como puede o no, manejar un rango de fechas, queria ver si hay una forma de hacer si en la clausula Where del query poner una especie de If para condicionar la busqueda.

Select * From XTabla
Where .....
.....
.....
If @Fecha1 <> '' and @Fecha2 <> ''
And XTabla.Fecha between @Fecha1 and @Fecha2
Order By......

Esa es la necesidad que tengo, pero a la hora de intentar el If no puedo hacer que funcione.
Ya intente haciendo 2 queries diferentes condicionandolos con el if, pero no se me hace muy optimo, no se si exista una forma que ocupe el menor codigo posible o que no tenga que repetir el mismo query.

Saludos y Gracias de antemano :D
 
#2
Sql Server no es mi motor de base de datos de uso habitual pero, ¿has probado con
... AND XTABLA.Fecha BETWEEN
CASE WHEN @Fecha1 <> '' THEN @Fecha1 ELSE '01/01/1800' END
AND
CASE WHEN @Fecha2 <> '' THEN @Fecha2 ELSE '01/01/2200' END

o si el between no lo permite :
... AND XTABLA.Fecha >=
CASE WHEN @Fecha1 <> '' THEN @Fecha1 ELSE '01/01/1800' END
AND XTABLA.Fecha <=
CASE WHEN @Fecha2 <> '' THEN @Fecha2 ELSE '01/01/2200' END (obviamente las fechas de 1800 o 2200 es para poner unos margenes
fuera de los valores posibles)
 

lestatab

Bovino maduro
#4
Yep, if no se puede usar dentro de consultas (como un iif), debe ir case y su condición. Case es la opción y la solución como lo muestra laloreds.
 
Arriba