none
Como hacer un Union All con los result set de 2 store procedure... RRS feed

  • Pregunta

  • Hola a todos, tengo 2 funciones similares "las funciones realizan varios querys, como cte y cosas asi, el query que pongo es solo de ejemplo"

    CREATE FUNCTION [dbo].[fn_Obtener_Funcion_A]()
    RETURNS TABLE
    AS
    RETURN
    Select * From Cte;

    CREATE FUNCTION [dbo].[fn_Obtener_Funcion_B]()
    RETURNS TABLE
    AS
    RETURN
    Select * From Cte;

    Y tengo un store procedure el cual realizo un union entre ambaas funciones

    Select * From dbo.fn_Obtener_Funcion_A

    Union All

    Select * From dbo.fn_Obtener_Funcion_B

    Segun tengo entendido los store procedure son mejor a nivel de performance que las funciones, ya que lo mismo estan precompilados... Quiero cambiar las funciones por store procedure, pero no se como hacer para realizar 2 union all entre store procedure... 

    nota: por logica de negocio no puedo realziar un store procedure el cual por si solo hago el union all entre ambas tabla directamente...

    Gracias a todos


    sábado, 22 de septiembre de 2012 18:05

Respuestas

  • Hasta donde sé las funciones también son compiladas y por lo tanto tienen planes de ejecución igualmente eficientes que las consultas de procedimientos almacenados.  Siga usando las funciones.

    Jose R. MCP
    Code Samples

    • Marcado como respuesta Zr-.- sábado, 22 de septiembre de 2012 19:45
    sábado, 22 de septiembre de 2012 18:07
  • De acuerdo con webJose, puedes hacerlo con funciones o con procedimientos almacenados, anteriormente en otro hilo ( Resultado de un Procedure a un valor escalar ) preguntaron algo similar a lo que tu cuestionas ; te paso como pudieras unir 2 procedimientos:

    declare @procedure1 table ( campo1  varchar(30),campo2 int )
    declare @procedure2 table ( campo1  varchar(30),campo2 int )
    
    insert into  @procedure1
    exec tuSP1 ;
    
    insert into  @procedure2
    exec tuSP2 ;
    
    
    select * from @procedure1
    union
    select * from @procedure2;

    No he probado el código, considero que no deberías tener problemas.

    SALUDOS !


    Sergio Sánchez Arias


    Hola, gracias por la indicación y por el link, asi hare...
    • Marcado como respuesta Zr-.- sábado, 22 de septiembre de 2012 19:45
    sábado, 22 de septiembre de 2012 19:45

Todas las respuestas

  • Hasta donde sé las funciones también son compiladas y por lo tanto tienen planes de ejecución igualmente eficientes que las consultas de procedimientos almacenados.  Siga usando las funciones.

    Jose R. MCP
    Code Samples

    • Marcado como respuesta Zr-.- sábado, 22 de septiembre de 2012 19:45
    sábado, 22 de septiembre de 2012 18:07
  • De acuerdo con webJose, puedes hacerlo con funciones o con procedimientos almacenados, anteriormente en otro hilo ( Resultado de un Procedure a un valor escalar ) preguntaron algo similar a lo que tu cuestionas ; te paso como pudieras unir 2 procedimientos:

    declare @procedure1 table ( campo1  varchar(30),campo2 int )
    declare @procedure2 table ( campo1  varchar(30),campo2 int )
    
    insert into  @procedure1
    exec tuSP1 ;
    
    insert into  @procedure2
    exec tuSP2 ;
    
    
    select * from @procedure1
    union
    select * from @procedure2;
    

    No he probado el código, considero que no deberías tener problemas.

    SALUDOS !


    Sergio Sánchez Arias


    sábado, 22 de septiembre de 2012 18:36
  • Hasta donde sé las funciones también son compiladas y por lo tanto tienen planes de ejecución igualmente eficientes que las consultas de procedimientos almacenados.  Siga usando las funciones.

    Jose R. MCP
    Code Samples

    Hola, pense que no... Muchas gracias seguire con las funciones!!!
    sábado, 22 de septiembre de 2012 19:44
  • De acuerdo con webJose, puedes hacerlo con funciones o con procedimientos almacenados, anteriormente en otro hilo ( Resultado de un Procedure a un valor escalar ) preguntaron algo similar a lo que tu cuestionas ; te paso como pudieras unir 2 procedimientos:

    declare @procedure1 table ( campo1  varchar(30),campo2 int )
    declare @procedure2 table ( campo1  varchar(30),campo2 int )
    
    insert into  @procedure1
    exec tuSP1 ;
    
    insert into  @procedure2
    exec tuSP2 ;
    
    
    select * from @procedure1
    union
    select * from @procedure2;

    No he probado el código, considero que no deberías tener problemas.

    SALUDOS !


    Sergio Sánchez Arias


    Hola, gracias por la indicación y por el link, asi hare...
    • Marcado como respuesta Zr-.- sábado, 22 de septiembre de 2012 19:45
    sábado, 22 de septiembre de 2012 19:45