Ayuda con Procedimiento Almacenado ( Parametro )

04/11/2008 - 17:31 por Francizk0 | Informe spam
Q tal gente otra ves acudiendo a uds.
tengo el sgt problema o duda ??

Tengo un SP el cual una de las condicion utilizon el IN , el WHERE es
algo asi
WHERE Campo IN ( @Parametro ) , ahi todo bien lo que ocurre es q como
mando @Parametro si quiero q valga
algo asi :
@Parametro = 'xx-xxxx' , 'xx-xxxx' , 'xx-xxxx'
yq qye solo funciona si lo mando :
@Parametro = 'xx-xxxx', es decir con una valor
mi duda es de que forma puedo hacer que @Parametro sea como el primer
caso
Utilizo Win XP y MS-SQL 2000

Alguna idea????????

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
04/11/2008 - 21:07 | Informe spam
Carlos,

Se que tu estas conciente de este problema, solo lo puntualize porque los
desarrolladores nuevos no estan al tanto de este problema y si se le da la
solucion sin avisarle de los riesgos, entonces ya sabes las consecuencias.

En uno de los articulos de Erland, el que posteo Carlos Sacristan, se
explica como descomponer esa lista, usando una funcion que devuelve una tabla.

AMB


"Carlos M. Calvelo" wrote:

Mostrar la cita
#7 Carlos M. Calvelo
04/11/2008 - 21:15 | Informe spam
On 4 nov, 21:07, Alejandro Mesa
wrote:
Mostrar la cita
Tienes toda la razón. Bien hecho.

Saludos,
Carlos
#8 Jaime Lucci
04/11/2008 - 21:22 | Informe spam
Hola!

Que te parece armar una tabla temporal con los valores del parametro y
despues hacer un join con esa tabla temporal?

Por ejemplo:

IF OBJECT_ID(N'[tempdb]..[#tabla]') IS NOT NULL DROP TABLE #tabla
CREATE TABLE #tabla (valor char(10))

WHILE CHARINDEX(',' , @Parametro, 0) <> 0 AND CHARINDEX(',' , @Parametro, 0)
IS NOT NULL
BEGIN
SET @valor = LEFT(@Parametro,CHARINDEX(',' , @Parametro, 0) - 1)
SET @nSecuencias = CASE WHEN CHARINDEX(',' , @Parametro, 0) = 0
THEN ''
ELSE
RIGHT(@Parametro,LEN(@Parametro) - CHARINDEX(',' , @Parametro, 0))
END
INSERT INTO #tabla
SELECT @valor
END
INSERT INTO #tabla SELECT @Parametro


Luego, simplemente realiza un JOIN con #tabla a travéz del campo.

Saludos.


Jaime Lucci



"Francizk0" wrote in message
news:
Mostrar la cita
#9 Jaime Lucci
04/11/2008 - 21:33 | Informe spam
Perdón, donde dice

SET @nSecuencias = CASE ...

debe ser

SET @Parametro = CASE ...


Con ese codigo, al tener por ejemplo @Parametro = ''xxxx','yyyy','zzzz''
te forma la tabla temporal #tabla con lo siguiente:

valor
xxxx
yyyy
zzzz


lo unico que te queda es hacer:

select *
from tabla a
inner join #tabla b
on a.campo = b.valor

y de esta forma obtienes el resultado que esperas.

Saludos.

"Jaime Lucci" wrote in message
news:
Mostrar la cita
0)
Mostrar la cita
#10 Jose TH
04/11/2008 - 21:41 | Informe spam
Otra opcion mas si te gusta ensayar y si no son muchos datos:

Usa la funcion PatIndex.

WHERE PATINDEX('%,' + Campo + ',%' , ',' + @parametros + ',' ) > 0


Las comas agregadas son a proposito. Ademas no debe haber espacios ni
apostrofes en @parametros. ejemplo: xx-xxx,xx-xxx,xx-xxx
Si Campo lleva espacios sobrantes a la izq o a la der. debes eliminarlos
con Ltrim o Rtrim.










"Francizk0" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida