Pasar Array por parametro a StoredProcedure

19/10/2004 - 11:36 por Oriol | Informe spam
Hola a todos,

Tengo una duda. Necesito enviar a un StoredProcedure un array con datos.
Este array solo dispone de strings, es decir, es un array bidimensional.

Es del tipo:
array
|- string
|- string
|- string
etc...

Este es un array con unas 10.000 posiciones y lo necesito pasar en un
StoredProcedure que me hace una consulta a una tabla seleccionando todos los
registros que estan dentro de este array.

La consulta seria algo asi: (simplificada pero para que se vea la idea)

Select * from tabla1 where campo IN (array)

Esto antes lo tenia con una consulta anidada como esta:

Select * from tabla1 where campo IN (select campo2 from tabla2 where
condiciones)

pero ahora no puedo hacerlo asi, y lo unico que tengo es un array en C# con
los strings y el stored para hacerlo.

Alguna idea? Se le puede pasar directamente, o hay alguna funcion para
convertir un array en un string separado por ","? Seria el string demasiado
largo para pasarlo como parametro?

Gracias y saludos a todos,
Oriol.

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
19/10/2004 - 11:57 | Informe spam
Hola oriol,

una sugerencia... podrías utilizar un XML como entrada al Store Procedure.
Dentro del SP lo recorres y vas haciendo con los datos lo que debas hacer.

Un saludo,

Jorge Serrano Pérez
Microsoft MVP VB.NET
http://www.portalvb.com/
http://weblogs.golemproject.com/jorge/



"Oriol" wrote:

Hola a todos,

Tengo una duda. Necesito enviar a un StoredProcedure un array con datos.
Este array solo dispone de strings, es decir, es un array bidimensional.

Es del tipo:
array
|- string
|- string
|- string
etc...

Este es un array con unas 10.000 posiciones y lo necesito pasar en un
StoredProcedure que me hace una consulta a una tabla seleccionando todos los
registros que estan dentro de este array.

La consulta seria algo asi: (simplificada pero para que se vea la idea)

Select * from tabla1 where campo IN (array)

Esto antes lo tenia con una consulta anidada como esta:

Select * from tabla1 where campo IN (select campo2 from tabla2 where
condiciones)

pero ahora no puedo hacerlo asi, y lo unico que tengo es un array en C# con
los strings y el stored para hacerlo.

Alguna idea? Se le puede pasar directamente, o hay alguna funcion para
convertir un array en un string separado por ","? Seria el string demasiado
largo para pasarlo como parametro?

Gracias y saludos a todos,
Oriol.



Respuesta Responder a este mensaje
#2 A.Poblacion
19/10/2004 - 15:29 | Informe spam
Convertir el array en un string separado por comas es muy fácil:

string LaCadena = string.Join(",", ElArray);

Pero creo que por desgracia no te va a valer para pasárselo al procedimiento
almacenado: Si el procedimiento dice
Select * from tabla1 where campo IN (@LaCadena)
no lo he probado pero creo que SQL Server interpreta que quieres buscar un
registro en el que el valor de 'campo' es igual a toda la cadena con sus
comas incluidas.


"Oriol" <intranet[arroba]rvsa-itv.com> wrote in message
news:
Hola a todos,

Tengo una duda. Necesito enviar a un StoredProcedure un array con datos.
Este array solo dispone de strings, es decir, es un array bidimensional.

Es del tipo:
array
|- string
|- string
|- string
etc...

Este es un array con unas 10.000 posiciones y lo necesito pasar en un
StoredProcedure que me hace una consulta a una tabla seleccionando todos


los
registros que estan dentro de este array.

La consulta seria algo asi: (simplificada pero para que se vea la idea)

Select * from tabla1 where campo IN (array)

Esto antes lo tenia con una consulta anidada como esta:

Select * from tabla1 where campo IN (select campo2 from tabla2 where
condiciones)

pero ahora no puedo hacerlo asi, y lo unico que tengo es un array en C#


con
los strings y el stored para hacerlo.

Alguna idea? Se le puede pasar directamente, o hay alguna funcion para
convertir un array en un string separado por ","? Seria el string


demasiado
largo para pasarlo como parametro?

Gracias y saludos a todos,
Oriol.


Respuesta Responder a este mensaje
#3 Rodrigo Corral [MVP]
19/10/2004 - 17:55 | Informe spam
Yo intentaria pasar la cadena, si eso no funciona, plan b.

Plan b, lo orientaria por el lado de las tablas temporales, construir una
tabla temporal y llenarla con los registos y que el prodecimiento almacendo
haga un join con la tabla temporal para descartar aquellos registros que no
existan en la misma. Quiza sea necesario que le pases el nombre de la tabla
temporal para que la destruya cuando acabo.

No intentaria nada sin antes preguntar en el grupo de sql server... seguro
que te dan la mejor solución posible...


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#4 Rodrigo Corral [MVP]
19/10/2004 - 17:56 | Informe spam
Siempre puede utilizar sp_execsql para que lo interprete de la manera
adecuada...


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#5 Oriol
20/10/2004 - 09:09 | Informe spam
Hola Rodrigo,

Muchas gracias por tu ayuda. Al final escogi el plan b. Utilizo una tabla
temporal y tambien pregunte al grupo de SQL y me lo recomendaron. Asi que he
implementado esta opcion.

Mil gracias.

Un saludo,
Oriol.

"Rodrigo Corral [MVP]" escribió en el mensaje
news:ukR$
Yo intentaria pasar la cadena, si eso no funciona, plan b.

Plan b, lo orientaria por el lado de las tablas temporales, construir una
tabla temporal y llenarla con los registos y que el prodecimiento


almacendo
haga un join con la tabla temporal para descartar aquellos registros que


no
existan en la misma. Quiza sea necesario que le pases el nombre de la


tabla
temporal para que la destruya cuando acabo.

No intentaria nada sin antes preguntar en el grupo de sql server... seguro
que te dan la mejor solución posible...


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida