none
Pasar un vector a un procedimiento almacenado RRS feed

  • Pregunta

  • Tengo un procedimiento almacenado que tiene que recibir un conjunto de claves primarias de proveedores (int), además de otros datos.

    Me imagino que el modo más sencillo de hacerlo será utilizando un vector de enteros pero no sé si se puede hacer. Os agradecería cualquier ayuda.

    miércoles, 26 de enero de 2011 17:53

Respuestas

  • Estimado.

    Tuve ese mismo problema de pasar un conjunto de datos a un SP.

    Se podria utilizando unos artificios.

    FORMA A: Uso de dato concatenado:

    1. armar el valor concatenado en VB de la siguiente manera :

    datoVB ="-valor1- ,-Valor2- ,-Valor3-,-Valor3-"

    2. pasalor como parametro al SP

    SP_Store datob

    3. En el store ejecutar un REPLACE a los guiones

    seria :

    creatre proc SP_Store
    @dato varchar(50)=''
    as
    declare @txtsql varchar(8000)
    set @txtsql =''
    set @dato=replace(@dato,'-',char(39) )

    --asi lo reemplazas con las comillas.

    set @txtsql= 'select * from tu_tabla where campo in (' + @dato +' )'
    exec (@txtsql)

    NOTA : Si los datos
    Segunda FORMA

    1. Creas una tabla temporal donde guadas cada uno de los datos que piensas mandar a evaluar al SQL.

    TABLA_TEMP
    CAMPO
    DATO1
    DATO2
    DATO3
    DATO4

    2.Luego en tu sp , utilizar los datos de esa tabla y los eliminas , tener en cuenta el usuario y pc que llena los datos para no causar conflictos.

    Tercera forma

    Usar XML , pasar como parametro un XML a tu store

    Bueno espero te haya servido de ayuda.

    saludos


    Rolando Lau Project Management
    miércoles, 26 de enero de 2011 18:08
  • Hola,


    Me parece que este hilo puede ayudarte a trabajar con esto:

    http://social.msdn.microsoft.com/Forums/es/sqlserveres/thread/1fd6a5e1-c297-4bdb-bcfd-9bfb0d636799

    Se explican varias formas de como hacer lo que deseas, esperando que te sea de mucha utilidad.

     


    Willy Taveras.-

    IT Learn - Learning Together

    miércoles, 26 de enero de 2011 18:52
    Moderador
  • Si estás usando SQL Server 2008, además de las tres formas mencionadas por Rolando puedes también pasarle al procedimiento almacenado un parámetro de tipo TABLE. Hay una explicación bastante detallada en este artículo de SQLTeam:

    http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

     

    miércoles, 26 de enero de 2011 18:58

Todas las respuestas

  • Estimado.

    Tuve ese mismo problema de pasar un conjunto de datos a un SP.

    Se podria utilizando unos artificios.

    FORMA A: Uso de dato concatenado:

    1. armar el valor concatenado en VB de la siguiente manera :

    datoVB ="-valor1- ,-Valor2- ,-Valor3-,-Valor3-"

    2. pasalor como parametro al SP

    SP_Store datob

    3. En el store ejecutar un REPLACE a los guiones

    seria :

    creatre proc SP_Store
    @dato varchar(50)=''
    as
    declare @txtsql varchar(8000)
    set @txtsql =''
    set @dato=replace(@dato,'-',char(39) )

    --asi lo reemplazas con las comillas.

    set @txtsql= 'select * from tu_tabla where campo in (' + @dato +' )'
    exec (@txtsql)

    NOTA : Si los datos
    Segunda FORMA

    1. Creas una tabla temporal donde guadas cada uno de los datos que piensas mandar a evaluar al SQL.

    TABLA_TEMP
    CAMPO
    DATO1
    DATO2
    DATO3
    DATO4

    2.Luego en tu sp , utilizar los datos de esa tabla y los eliminas , tener en cuenta el usuario y pc que llena los datos para no causar conflictos.

    Tercera forma

    Usar XML , pasar como parametro un XML a tu store

    Bueno espero te haya servido de ayuda.

    saludos


    Rolando Lau Project Management
    miércoles, 26 de enero de 2011 18:08
  • Hola,


    Me parece que este hilo puede ayudarte a trabajar con esto:

    http://social.msdn.microsoft.com/Forums/es/sqlserveres/thread/1fd6a5e1-c297-4bdb-bcfd-9bfb0d636799

    Se explican varias formas de como hacer lo que deseas, esperando que te sea de mucha utilidad.

     


    Willy Taveras.-

    IT Learn - Learning Together

    miércoles, 26 de enero de 2011 18:52
    Moderador
  • Si estás usando SQL Server 2008, además de las tres formas mencionadas por Rolando puedes también pasarle al procedimiento almacenado un parámetro de tipo TABLE. Hay una explicación bastante detallada en este artículo de SQLTeam:

    http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

     

    miércoles, 26 de enero de 2011 18:58