WHERE dinamico

12/01/2010 - 18:01 por Angel Zapata | Informe spam
Hola grupo,

tengo un sp que admite varias combinaciones y para no crear una bestialidad
de codigo que luego no hay que controle he pensado hacerlo con una clausula
WHERE dinamica, mas o menos como expongo, entendiendo que hay tres grupos de
filtro, por un lado está el nivel máximo que se aplica siempre, despues está
el filtro que se puede aplicar a varios campos con el operador LIKE %Texto%
si es cadena o LIKE CONVERT si no lo es, y por ultimo está el filtro de
mostrar todos o solamente los que no han sido baja, es decir los que la
fecha de baja es null, siendo los dos ultimos opcionales del usuario.

He montado el where pero no consigo que me funcione, ¿alguna idea?

Un saludo y gracias por anticipado.
Angel Zapata
WHERE (((@NivelMaximo = 1) AND (Agente.AgeCodigo >0))

OR ((@NivelMaximo = 3) AND (Agente.AgenteZonaCodigo = @Zona))

OR ((@NivelMaximo = 4) AND (Agente.AgenteGerenciaCodigo = @Gerencia))

OR ((@NivelMaximo = 5) AND (Agente.AgenteDelegacionCodigo = @Delegacion))

OR ((@NivelMaximo = 6) AND (Agente.AgenteEquipoCodigo = @Equipo))

OR ((@NivelMaximo = 7) AND (Agente.AgeCodigo = @Promotor)))

AND (((@FiltroEn = 'Codigo') AND (Agente.AgeCodigo = CONVERT(Integer,
@FiltroPor)))

OR ((@FiltroEn = 'Nombre') AND (Agente.AgeApellido1 + ' ' +
Agente.AgeApellido2 + ' ' + Agente.AgeNombre LIKE @FiltroPor ))

OR ((@FiltroEn = 'NIF') AND (Agente.AgeNIF LIKE '%' + @FiltroPor + '%'))

OR ((@FiltroEn = 'Alta') AND (Agente.AgenteFechaAltaCategoria =
CONVERT(DATETIME, @FiltroPor,103)))

OR ((@FiltroEn = 'Baja') AND (Agente.AgenteFechaBajaCategoria =
CONVERT(DATETIME, @FiltroPor, 103)))

OR ((@FiltroEn = 'EMPR') AND (Agente.EmpresaCodigo LIKE '%' + @FiltroPor +
'%'))

OR ((@FiltroEn = 'TRAB') AND (Agente.TrabajadorCodigo LIKE '%' + @FiltroPor
+ '%'))

OR ((@FiltroEn = 'Delegacion') AND (Agente_1.AgeApellido1 + ' ' +
Agente_1.AgeApellido2 + ' ' + Agente_1.AgeNombre LIKE + '%' + @FiltroPor +
'%')))

AND (((@MostrarTodos = 0) AND (Agente.AgenteFechaBajaCategoria IS NULL)))
 

Leer las respuestas

#1 Gustavo Cantero (The Wolf)
12/01/2010 - 22:33 | Informe spam
Angel:
¿Cuál es el problema que está teniendo? ¿Te devuelve un error o no
devuelve nada? ¿@MostrarTodos vale "0"? ¿Hay registros donde
Agente.AgenteFechaBajaCategoria sea nulo?
Saludos.

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


On 12/01/2010 02:01 p.m., Angel Zapata wrote:
Hola grupo,

tengo un sp que admite varias combinaciones y para no crear una bestialidad
de codigo que luego no hay que controle he pensado hacerlo con una clausula
WHERE dinamica, mas o menos como expongo, entendiendo que hay tres grupos de
filtro, por un lado está el nivel máximo que se aplica siempre, despues está
el filtro que se puede aplicar a varios campos con el operador LIKE %Texto%
si es cadena o LIKE CONVERT si no lo es, y por ultimo está el filtro de
mostrar todos o solamente los que no han sido baja, es decir los que la
fecha de baja es null, siendo los dos ultimos opcionales del usuario.

He montado el where pero no consigo que me funcione, ¿alguna idea?

Un saludo y gracias por anticipado.
Angel Zapata
WHERE (((@NivelMaximo = 1) AND (Agente.AgeCodigo>0))

OR ((@NivelMaximo = 3) AND (Agente.AgenteZonaCodigo = @Zona))

OR ((@NivelMaximo = 4) AND (Agente.AgenteGerenciaCodigo = @Gerencia))

OR ((@NivelMaximo = 5) AND (Agente.AgenteDelegacionCodigo = @Delegacion))

OR ((@NivelMaximo = 6) AND (Agente.AgenteEquipoCodigo = @Equipo))

OR ((@NivelMaximo = 7) AND (Agente.AgeCodigo = @Promotor)))

AND (((@FiltroEn = 'Codigo') AND (Agente.AgeCodigo = CONVERT(Integer,
@FiltroPor)))

OR ((@FiltroEn = 'Nombre') AND (Agente.AgeApellido1 + ' ' +
Agente.AgeApellido2 + ' ' + Agente.AgeNombre LIKE @FiltroPor ))

OR ((@FiltroEn = 'NIF') AND (Agente.AgeNIF LIKE '%' + @FiltroPor + '%'))

OR ((@FiltroEn = 'Alta') AND (Agente.AgenteFechaAltaCategoria > CONVERT(DATETIME, @FiltroPor,103)))

OR ((@FiltroEn = 'Baja') AND (Agente.AgenteFechaBajaCategoria > CONVERT(DATETIME, @FiltroPor, 103)))

OR ((@FiltroEn = 'EMPR') AND (Agente.EmpresaCodigo LIKE '%' + @FiltroPor +
'%'))

OR ((@FiltroEn = 'TRAB') AND (Agente.TrabajadorCodigo LIKE '%' + @FiltroPor
+ '%'))

OR ((@FiltroEn = 'Delegacion') AND (Agente_1.AgeApellido1 + ' ' +
Agente_1.AgeApellido2 + ' ' + Agente_1.AgeNombre LIKE + '%' + @FiltroPor +
'%')))

AND (((@MostrarTodos = 0) AND (Agente.AgenteFechaBajaCategoria IS NULL)))





Preguntas similares