Query con CASE y valores NULL

13/07/2007 - 20:46 por Codigo47 | Informe spam
Tengo la siguiente tabla:

CLIENTE
IDCliente Cliente
IDUsuario IDUsuarioAlta
1
Esteban
1 2
2
Jose
3 1
3
Mario
2 NULL
4
Pedro
NULL 2
5
NULL
1 2

Y quiero hacer un Store que haga un SELECT, pudiendo pasarle todos los
campos de parametro y dependiendo si se paso un valor en un parametro:
que busque por ese valor, si No se paso un valor que lo ignore, si no
se paso ningun valor en los parametros, que sea igual a un SELECT *
FROM TABLA y por último si se pasan varios valores en los parametros,
que busque por todos esos campos y que el resultado coincida con todos
los valores.
Hice algo de todo esto, excepto que tengo problemas cuando el valor en
un campo es NULL. El query que hice es:

declare @IDCliente int
declare @Cliente varchar(50)
declare @IDUsuario int
declare @IDUsuarioAlta int

set @IDcliente = 0
set @Cliente = ''
set @IDUsuario = 0
set @IDUsuarioAlta = 0

select * from cliente
where
IDUsuario = CASE @IDUsuario WHEN 0 THEN IDUsuario ELSE @IDUsuario END
AND IDUsuarioAlta = CASE @IDUsuarioAlta WHEN 0 THEN IDUsuarioAlta
ELSE @IDUsuarioAlta END
AND idCliente = CASE @idCliente WHEN 0 THEN idCliente ELSE @idCliente
END
AND Cliente LIKE '%' + CASE @Cliente WHEN '' THEN Cliente ELSE
@Cliente END + '%'

El problema es simple, ese query, no trae los registros que tienen
algun campo con valor NULL (por ejemplo el Cliente con IDCLiente = 5,
tiene el campo Cliente igual a NULL y no lo trae, tambien el IDCliente
4, que tiene el campo IDUsuario igual a NULL).

Que se puede hacer para que traiga esos registros y cuando se pasan
valores no los traiga.

Gracias, saludos.
 

Leer las respuestas

#1 jcpc91
13/07/2007 - 21:29 | Informe spam
los procedimientos almacenados no aceptar ke se les pase valores null
esdecir no puedes hacer esto

EXECUTE MiStoreProcedure 'param1', 'param2', NULL

eso no se puede hacer tienes ke mandarle todos los paràmetros si no te
marca un error adviritiendote ke falta un paràmetro

Preguntas similares