Consulta multiple

16/03/2005 - 17:41 por smc | Informe spam
Hola:
Ante un requerimiento necesito hacer una consulta que recibe 7 parametros y
seleccionar los reg. dependiendo de las combinacion de estos, estamos
hablando de 127 posibles combinaciones con mas de 400 lineas de codigo, llego
hacer la consulta pero no es optima, no se si alguien me puede sugerir algo
mejor.

Atte,

smc

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
16/03/2005 - 19:01 | Informe spam
Aca te paso un magnifico articulo sobre este tema.

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html


AMB


"smc" wrote:

Hola:
Ante un requerimiento necesito hacer una consulta que recibe 7 parametros y
seleccionar los reg. dependiendo de las combinacion de estos, estamos
hablando de 127 posibles combinaciones con mas de 400 lineas de codigo, llego
hacer la consulta pero no es optima, no se si alguien me puede sugerir algo
mejor.

Atte,

smc
Respuesta Responder a este mensaje
#2 JHenao
16/03/2005 - 21:19 | Informe spam
Hola smc,
Hace poco yo tuve que hacer lo mismo.
mira te paso lo que hize. utilize un procedimiento y dos funciones, aunque
creo que solo necesitas una, ya que la otra la utilizo para usar o no un like
dependiendo del caso, pero de todas maneras miralas , son faciles de entender
y estan comentadas.


Adios!!
*******************
CREATE PROCEDURE stpEntidad_ListByWhichever /* List by whichever from the
enumerates field(s)*/
@IdEntidad VARCHAR(15) =NULL, --Varchar Type because it can get specials
characters(%)
@Nit VARCHAR(11) =NULL,
@Descripcion VARCHAR(50) =NULL,
@Plegal VARCHAR(1) =NULL,
@Tipo VARCHAR(1) =NULL--Varchar Type because it can get specials
characters(%)
AS

DECLARE @Condicion VARCHAR(200) --Variable for to store the conditioned
fields
SELECT @Condicion='' --Start the variable
IF @IdEntidad<>NULL AND @IdEntidad<>'0' --If not null, include it in the
search
BEGIN
SELECT @Condicion=dbo.fSeparator(@condicion)--Call the function for to set
the correct word ( AND or WHERE)
SELECT @Condicion=@Condicion+" IdEntidad "+ dbo.fcomparer(@IdEntidad)
END
IF @Nit<>NULL
BEGIN
SELECT @Condicion=dbo.fSeparator(@condicion)
SELECT @Condicion=@Condicion+" Nit "+dbo.fcomparer(@Nit)
END
IF @Descripcion<>NULL
BEGIN
SELECT @Condicion=dbo.fSeparator(@condicion)
SELECT @Condicion=@Condicion+" Descripcion "+dbo.fcomparer(@Descripcion)
END
IF @Plegal<>NULL
BEGIN
SELECT @Condicion=dbo.fSeparator(@condicion)
SELECT @Condicion=@Condicion+" Plegal = "+ @Plegal
END
IF @Tipo<>NULL
BEGIN
SELECT @Condicion=dbo.fSeparator(@condicion)
SELECT @Condicion=@Condicion+" Tipo = "+ @Tipo
END

EXECUTE('SELECT * FROM ENTIDAD '+ @Condicion) --Execute The command, if
there aren't condition get all Rows
GO

***********************
CREATE FUNCTION fComparer (@Value VARCHAR(30))
RETURNS VARCHAR(30) AS

BEGIN
DECLARE @ValueTemp VARCHAR(200)

IF LEFT(@Value,1) ='%' OR RIGHT(@Value,1) ='%'
BEGIN
SELECT @ValueTemp=" LIKE '"+ @Value+"'"
END
ELSE
BEGIN
SELECT @ValueTemp=" = '"+ @Value+"'"
END

RETURN @ValueTemp
END
***********
CREATE FUNCTION fSeparator(@Value VARCHAR(200))
RETURNS VARCHAR(200) AS

BEGIN
DECLARE @ValueTemp VARCHAR(200)

IF @Value<>''
BEGIN
SELECT @ValueTemp=@Value+' AND '
END
ELSE
BEGIN
SELECT @ValueTemp= ' WHERE '
END
RETURN @ValueTemp
END
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida