none
Como cosntruir procedimiento almacenado que me devuelva varias consultas de diferentes tablas ? RRS feed

  • Pregunta

  • HOla

    Se puede construir un procedimiento almacenado que me devuelva en un arreglo varias consultas ...

    por ejemplo algo asi:

    SELECT * FROM CLIENTE
    
    go
    
    SELECT * FROM CLIENTEDETALLE
    
    go
    
    SELECT * FROM TRANSACCION
    
    go 
    
    SELECT * FROM TRANSACCIONDETALLE
    
    
    RETURN ConjuntoDatos ;
    
    

    Si se puede como podria hacerlo ??


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    jueves, 13 de septiembre de 2018 15:08

Respuestas

  • Se puede construir un procedimiento almacenado que me devuelva en un arreglo varias consultas ...

    No existen arreglos en SQL, por lo tanto no puedes escribir un procedimiento que devuelva un arreglo.

    Lo que sí puedes hacer es un procedimiento que devuelva los resultados de varias SELECTs. Eso sí que funciona. Luego el programa cliente puede, si quieres, meterlos en un arreglo.

    Básicamente sería como lo tienes, solo que quitando los GO:

    CREATE PROCEDURE dbo.Prueba AS
        SELECT * FROM CLIENTE
        SELECT * FROM CLIENTEDETALLE
        SELECT * FROM TRANSACCION
        SELECT * FROM TRANSACCIONDETALLE
    GO

    Si el programa cliente está hecho en .NET, el truco para leer todos los resultados es usar un SqlDataReader y llamar a .NextResult para saltar de cada Select al siguiente.

    jueves, 13 de septiembre de 2018 15:39

Todas las respuestas

  • Primero, el SELECT *, hay que analizarlo, ya que NO CREO que tus tablas tengan el mismo numero columnas y tipos de datos, ¿Cual es la RAZÓN por la cual desea hacer algo por el estilo?
    jueves, 13 de septiembre de 2018 15:12
  • Hola iislas...

    Que  las tablas tengan diferentes numeros de columnas no importaria..por que si devuelvo un arreglo la formalogica seria algo asi :

    ConjuntoDatos [0] = Select * From CLiente

    ConjuntoDatos [1] = Select * From ClienteDetalle

    y asi sucesivamente ....


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    jueves, 13 de septiembre de 2018 15:27
  • Se puede construir un procedimiento almacenado que me devuelva en un arreglo varias consultas ...

    No existen arreglos en SQL, por lo tanto no puedes escribir un procedimiento que devuelva un arreglo.

    Lo que sí puedes hacer es un procedimiento que devuelva los resultados de varias SELECTs. Eso sí que funciona. Luego el programa cliente puede, si quieres, meterlos en un arreglo.

    Básicamente sería como lo tienes, solo que quitando los GO:

    CREATE PROCEDURE dbo.Prueba AS
        SELECT * FROM CLIENTE
        SELECT * FROM CLIENTEDETALLE
        SELECT * FROM TRANSACCION
        SELECT * FROM TRANSACCIONDETALLE
    GO

    Si el programa cliente está hecho en .NET, el truco para leer todos los resultados es usar un SqlDataReader y llamar a .NextResult para saltar de cada Select al siguiente.

    jueves, 13 de septiembre de 2018 15:39
  • Alberto, hola antes que nada

    Como dicen los abogansters, Suponiendo sin conceder que esto funcionara y alguno de los SELEC me diera un conjunto de resultados de 2 mil millones de registros (no quiero exagerar), con unas 2 mil columnas (tampoco quiero exagerar), ¿como para que?

    jueves, 13 de septiembre de 2018 15:57
  • Hola...

    Alberto Poblacion

    ¿como para que?

    Estoy creado una WebApi donde sincronizo datos desde una aplicacion Mobil...entonces quiero crear un DataSet con estos resultados y serializarlo en un JSON asi en un solo GET devuelvo todas las tablas que nesecito....por que estaba creandola haciendo un GET para cada tabla y creo q eso no esta bien ...

    ya en en el foro para desarrollo  c# formule otra pregunta para complementar mi idea


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    jueves, 13 de septiembre de 2018 16:20
  • Bueno, no tiene por qué ir forzosamente vinculada una cosa a la otra. En el método Get del WebApi puedes hacer cuatro llamadas al servidor SQL, juntar los cuatro resultados en un único objeto en memoria (que puede ser un DataSet pero también podría ser una clase que contenga cuatro IEnumerables, por ejemplo), y finalmente devolver ese objeto serializado. Efectivamente, tienes razón en que devolver un único objeto con un único GET es mucho mejor que llamar a cuatro Gets. Pero en cambio hacer una única llamada al servidor SQL solo es marginalmente mejor que hacer las cuatro llamadas. Sí, es preferible hacer una sola, pero en comparación con el coste del Get, el coste de las llamadas al SQL (suponiendo que sea local) es relativamente pequeño.
    jueves, 13 de septiembre de 2018 19:40
  • Gracias Alberto Poblacion ...

    Efectivamente eso fue lo que hize ...Hacer varias llamadas al Motor Sql Server  y devolver un objeto DataSet...


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    domingo, 16 de septiembre de 2018 22:42