Problema con un where en un Sp

11/05/2004 - 17:22 por sole | Informe spam
Hola grupo, dando la lata como siempre...tengo una duda de como hacer un
WHERE de un parámetro que tanto me puede venir nulo como no...

El procedimiento le paso 3 parametros, 2 fijos (@Parametro1,@Parametro2) y
uno que no se sabe si viene que es @Parametro3, en la declaracion del
procdure le asigno a null...

El problema que tengo es que si me viene nulo no debo poner nada en el WHERE
y si me viene pues hacerlo sobre ese campo...pero no sé seguir, a ver si
alguién me ilumina.

Ej.
INSERT INTO #temporal (campo1,campo2,campo3)
SELECT Valor1, Valor2, Valor3
FROM ejemplo
WHERE campo1 = @Parametro1 AND campo2=@Parametro2

Un saludo y gracias por leerme.

Preguntas similare

Leer las respuestas

#1 Tinoco
11/05/2004 - 17:45 | Informe spam
Hola.

Puedes utilizar algo como esto:

INSERT INTO #temporal (campo1,campo2,campo3)
SELECT Valor1, Valor2, Valor3
FROM ejemplo
WHERE campo1 = @Parametro1 AND campo2=@Parametro2
and (@parametro3 is null or (not @parametro3 is null and
@parametro3 = campo3)

Espero que te sirva.

Hermilson
Colombia

Mostrar la cita
de como hacer un
Mostrar la cita
no...
Mostrar la cita
(@Parametro1,@Parametro2) y
Mostrar la cita
declaracion del
Mostrar la cita
poner nada en el WHERE
Mostrar la cita
seguir, a ver si
Mostrar la cita
#2 Maxi
11/05/2004 - 18:14 | Informe spam
Hola, te doy otra opcion ;-)

INSERT INTO #temporal (campo1,campo2,campo3)
SELECT Valor1, Valor2, Valor3
FROM ejemplo
WHERE campo1 like case when @campo1 is null then '%' when len(@campo1)=0
then '%' else @campo1 end
and campo2 like case when @campo2 is null then '%' when len(@campo2)=0 then
'%' else @campo2 end

Recorda que siempre vas a necesitar pasar los parametros en tu Store, en VB
hay algunas veces que no lo podes pasar como Nulo por lo cual lo debes pasar
como cadena 0, este metodo acepta en ambos casos y funciona!!

Claro ahora mis amios/as del foro estaran loquitos porque esto no es nada
optimo entre () claro ;-) pero para mi es mucho mejor esto que hacer la
consulta dinamica en el cliente :-D

Suerte


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"sole" <sole_77(arroba)mixmail(punto)com> escribió en el mensaje
news:
Mostrar la cita
WHERE
Mostrar la cita
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 04/05/2004
#3 sole
11/05/2004 - 18:24 | Informe spam
Siempre tan grandes :)...gracias mil, voy a probarlos

"sole" <sole_77(arroba)mixmail(punto)com> escribió en el mensaje
news:
Mostrar la cita
WHERE
Mostrar la cita
#4 ulises
11/05/2004 - 20:58 | Informe spam
Podrias hacer :

INSERT INTO #temporal (campo1,campo2,campo3)
SELECT valor1, valor2, valor3
FROM ejemplo
WHERE campo1 = @parametro1
AND campo2 = @parametro2
AND campo3 = ISNULL(@parametro3,campo3)

Saludos,
Ulises

Mostrar la cita
de como hacer un
Mostrar la cita
no...
Mostrar la cita
(@Parametro1,@Parametro2) y
Mostrar la cita
declaracion del
Mostrar la cita
poner nada en el WHERE
Mostrar la cita
seguir, a ver si
Mostrar la cita
#5 sole
12/05/2004 - 13:06 | Informe spam
Muchísimas gracias a los 3, me ha valido de mucho, estoy muy verde en los Sp
y saber diferentes formas de como hacerlo enriquece...

Voy a poner otro caso, a ver si tiene solución, es el mismo caso pero con un
parámetro más @Parametro4, si se le pasa el @Param3 y el @Param4 pues se
filtra el campo3 con un BETWEEN, pero si no se le pasa @Param3 ni @Param4 no
debe filtrar por ese campo, yo lo he hecho con >= y <= cogiendo los límites
inferior y superior pero no sé si es la forma correcta...

Muchas gracias de nuevo
Ads by Google
Search Busqueda sugerida