none
Invocar Stored Procedure desde otro Stored Procedure RRS feed

  • Pregunta

  • Muchachos necesito llamar a un stored procedure desde otro stored procedure tomar su valor

    hacer unos calculos y retornarlo.. Como hago eso?

    es decir como lo llamo y como lo asigno?  he estado teniendo problemas con eso.

    y luego necesito retornar los valores calculados.

     

    Create Procedure procedure1

    as

    begin

    Declare @variable int  = exec procedure2

    ....

    ...

    ...

     

     

    end

    viernes, 18 de febrero de 2011 15:22

Respuestas

  • Eso depende de como son retornado los datos que deseas usar desde el procedimiento que llamas. Si los datos son devuelto en forma de tabla, entonces tendras que usar una estructura tipo tabla, puede ser una variable tipo tabla o una tabla temporal y usar:

    insert into T(c1, ..., cn)
    exec sp_p2 @p1 = ....

    para capturar el resultado. Si el valor o valores son devueltos como parametros de salida, entonces deberas usar variables para guardar y capturar esos valores.

    declare @p1 int, @p2 varchar(25);

    set @p1 = 6;

    exec sp_p2 @p1, @p2 output;

    No menciono el valor de retorno como posible practica, ya que normalmente se usa para indicar si el procedimiento termino normalmente o si hubo algun error.

    declare @val_ret int;
    exec @val_ret = dbo.sp_p2 ...

    if @val_ret = 0 ...

     

     


    AMB

    Some guidelines for posting questions...

    • Marcado como respuesta Sabdiel Rivera sábado, 19 de febrero de 2011 0:40
    viernes, 18 de febrero de 2011 16:51

Todas las respuestas

  • Eso depende de como son retornado los datos que deseas usar desde el procedimiento que llamas. Si los datos son devuelto en forma de tabla, entonces tendras que usar una estructura tipo tabla, puede ser una variable tipo tabla o una tabla temporal y usar:

    insert into T(c1, ..., cn)
    exec sp_p2 @p1 = ....

    para capturar el resultado. Si el valor o valores son devueltos como parametros de salida, entonces deberas usar variables para guardar y capturar esos valores.

    declare @p1 int, @p2 varchar(25);

    set @p1 = 6;

    exec sp_p2 @p1, @p2 output;

    No menciono el valor de retorno como posible practica, ya que normalmente se usa para indicar si el procedimiento termino normalmente o si hubo algun error.

    declare @val_ret int;
    exec @val_ret = dbo.sp_p2 ...

    if @val_ret = 0 ...

     

     


    AMB

    Some guidelines for posting questions...

    • Marcado como respuesta Sabdiel Rivera sábado, 19 de febrero de 2011 0:40
    viernes, 18 de febrero de 2011 16:51
  • Excelente. Tengo una ultima pregunta para cerrar este hilo. Se puede declarar una variable tipo "table" sin tener que indicarles los campos que tiene que recibir por ejemplo.

     

    DECLARE @myTable table

    (

    campo1 int,

    campo2 int

    .

    .

    .

    )

     

    lo que quiero es poder recibir cuales quiera campos que un storedprocedure pueda traerme de una tabla. Ya que los resultados de los campos varian dependiendo los parametros que recibe el storedprocedure.

    viernes, 18 de febrero de 2011 17:29
  • Hola.

    No, eso no es posible. Como toda tabla, has de saber a priori qué campos contendrá. Te queda la opción de preparar algo que en tiempo de ejecución capture la información de los campos que se generen y cree la declaración de forma dinámica también, pero creo que no es eso lo que buscas.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    viernes, 18 de febrero de 2011 20:47
    Moderador