Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema en Consulta de filtros variables

Estas en el tema de Problema en Consulta de filtros variables en el foro de Bases de Datos General en Foros del Web. Holas, tengo un problema en una consulta... (trabajo con SQLServer y C#) tengo un formulario de busqueda con 3 filtros: id char(11) nombre varchar(50) apellido ...
  #1 (permalink)  
Antiguo 12/03/2004, 16:38
 
Fecha de Ingreso: marzo-2004
Mensajes: 5
Antigüedad: 20 años, 8 meses
Puntos: 0
Problema en Consulta de filtros variables

Holas, tengo un problema en una consulta...
(trabajo con SQLServer y C#)

tengo un formulario de busqueda con 3 filtros:
id char(11)
nombre varchar(50)
apellido varchar(50)

y quiero q me muestre los resultados sin considerar aquellos filtros que no sean llenados

trabajo con un storedprocedure al cual le paso los 3 datos como parametro y dentro del procedimiento debo validar si se trata o no de filtros nulos, en cuyo caso deberia obviarlos

me dijeron que usara dentro del where algo asi como
apellido=isnull(@apellido,apellido)
funciona correctamente pero solo cuando el filtro no es nulo; al parecer cuando es NULO no lo lee como tal, sino como cadena vacia, y por eso no me funciona

pero logre solucionarlo con esto:
apellido=@apellido+isnull(replicate(apellido,len(@ apellido)*-1+1),'')

y me funciona muy bien tanto para nombre como para apellido
el problema es con el campo codigo...
probablemente por el tipo de dato(es char y me es imposible cambiarlo porque asi esta determinado en la BD)

que me recomendarian hacer??? :S

gracias
  #2 (permalink)  
Antiguo 23/03/2004, 04:07
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 7 meses
Puntos: 0
Hola... se me presentó una cosa parecida para un sp, y después de probar varias opciones, la más eficiente, aunque a primera vista no lo parezca, es hacer una select diferente dependiendo de los parámetros que recibas.

Vas comprobando que parámetros recibes y pones las selects necesarias

alter procedure.....
@cCodCliente varchar(6) = '0',
@cCodSector varchar(20) = '0',
@nCodPractica int = 0,
@nCodConsultor int = 0

AS
If (@cCodCliente = '0' OR @cCodCliente = '')
BEGIN /*NO HA INDICADO CLIENTE*/
IF (@nCodConsultor = 0 OR @nCodConsultor = -1)
BEGIN /*NO HA INDICADO CONSULTOR*/
IF (@nCodPractica = 0 OR @nCodPractica = -1)
BEGIN /*NO HA INDICADO PRACTICA*/
IF (@cCodSector = '0' OR @cCodSector = '-1')
BEGIN /* NO HA INDICADO SECTOR, SELECT SIN FILTROS */
SELECT Clientes.CodigoEtas, ISNULL(TabEstadoServicios.AbrevEstado, 'PO') AS Estado,
ISNULL(TabEstadoServicios.DescEstado, 'Posible') AS DescEstado,
ISNULL(ServiciosAsignados.IdServicio, 0) AS IdServicio, ServiciosAsignados.FechaEstado,
ISNULL(TabEstadoServicios.AbrevEstado, 'PO') AS DatoEscribir, Clientes.COMPANY, UTIPO, ConsultorResponsable
FROM (SELECT CONTACT1.KEY1 AS CodigoEtas, CONTACT1.Company, UTIPO,
UOWNER AS ConsultorResponsable
FROM dbo.CONTACT1 INNER JOIN dbo.CONTACT2
ON dbo.CONTACT1.ACCOUNTNO = dbo.CONTACT2.ACCOUNTNO
WHERE (dbo.CONTACT2.UTIPO LIKE '%Cliente' OR dbo.CONTACT2.UTIPO LIKE '%Prospect'))
Clientes LEFT JOIN
(viewServiciosAsignadosMostrar ServiciosAsignados INNER JOIN TabEstadoServicios
ON ServiciosAsignados.Estado = TabEstadoServicios.IdEstado)
ON Clientes.CodigoEtas = ServiciosAsignados.CodigoEtas
ORDER BY Clientes.COMPANY
END
ELSE
BEGIN /*SOLO FILTRAR POR SECTOR*/
SELECT Clientes.CodigoEtas, ISNULL(TabEstadoServicios.AbrevEstado, 'PO') AS Estado,
ISNULL(TabEstadoServicios.DescEstado, 'Posible') AS DescEstado,
ISNULL(ServiciosAsignados.IdServicio, 0) AS IdServicio, FechaEstado,
ISNULL(TabEstadoServicios.AbrevEstado, 'PO') AS DatoEscribir, Clientes.Company, UTIPO, ConsultorResponsable
FROM (SELECT CONTACT1.KEY1 AS CodigoEtas, CONTACT1.Company, UTIPO,
UOWNER AS ConsultorResponsable
FROM dbo.CONTACT1 INNER JOIN dbo.CONTACT2
ON dbo.CONTACT1.ACCOUNTNO = dbo.CONTACT2.ACCOUNTNO
WHERE (dbo.CONTACT2.UTIPO LIKE '%Cliente' OR dbo.CONTACT2.UTIPO LIKE '%Prospect')
AND (CONTACT2.USECTSIC = @cCodSector))
Clientes LEFT JOIN
(viewServiciosAsignadosMostrar ServiciosAsignados
INNER JOIN TabEstadoServicios
ON ServiciosAsignados.Estado = TabEstadoServicios.IdEstado)
ON Clientes.CodigoEtas = ServiciosAsignados.CodigoEtas
ORDER BY Clientes.Company
END.....
.....
.....
.....


poner los predeterminados hacen que los nulos vengan con el valor que tú le pones, pero, las cadenas vacías, no son nulos, así que tienes que comprobar el valor '', para los numéricos solo hace falta que compruebes el cero, en mi caso, el cero no es un valor válido.

Es tedioso de hacer, pero funciona bien, y es rápido.

Un saludo
  #3 (permalink)  
Antiguo 28/03/2004, 21:16
 
Fecha de Ingreso: marzo-2004
Mensajes: 5
Antigüedad: 20 años, 8 meses
Puntos: 0
muchas gracias por el dato
voy a probarlo
pero segun lo que he leido, me parece que funcionara muy bien..

gracias
luis
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:26.