Buenas tardes con todos estimados, en esta oportunidad quisiera compartirle un caso que tuve el día de ayer. Se trata de procedimientos almacenados.
Problema:
¿Como llamar a un procedimiento almacenado pero que este a su vez llame a otros procedimientos y este a otro?
Ejemplo
create pocedure sp_procedure1
as
begin
exec sp_procedure2
end
create procedure sp_procedure2
as
begin
declare @n int=1
while n<=10
begin
exec sp_procedure3
set @n=@n+1
end
end
......
y así sucesivamente.
Creo que llamar a varios procedimientos es algo normal para un programador, sin embargo se me complicó cuando al llamar al 3cer procedimiento este devolvía un valor a traves de un select y no a través de una variable de retorno, es decir el cuerpo del 3cer procedimiento era así:
create procedure sp_procedure3
as
begin
--Muchas Validaciones....
.
.
.
select @va_retorno as va_retorno
end
Este tercer procedimiento devolvía un valor y además estaba siendo llamado por el 2do procedimiento pero que estaba en un while, como hacer esto?? Aunque me demoré un poco, valió la pena aprender, les comparto:
1. Cree una variable tipo table
2. Use el insert into
Lo más importante sería esto, porque después de almacenar lo que retorna el procedimiento 3 puedes tratar como se te antoje estos datos. Mas o menos quedó así:
create procedure sp_procedure2
as
begin
declare @result table (id int identity, valor int)
declare @n int=1
while n<=10
begin
inser into @result(valor)
exec sp_procedure3
set @n=@n+1
end
end
Se que tendrán muchas preguntas, porque tal vez no se entendió la idea, sin embargo pueden hacerme llegar sus dudas, preguntas que gustosamente trataré de ayudarles. Hasta la próxima.
Problema:
¿Como llamar a un procedimiento almacenado pero que este a su vez llame a otros procedimientos y este a otro?
Ejemplo
create pocedure sp_procedure1
as
begin
exec sp_procedure2
end
create procedure sp_procedure2
as
begin
declare @n int=1
while n<=10
begin
exec sp_procedure3
set @n=@n+1
end
end
......
y así sucesivamente.
Creo que llamar a varios procedimientos es algo normal para un programador, sin embargo se me complicó cuando al llamar al 3cer procedimiento este devolvía un valor a traves de un select y no a través de una variable de retorno, es decir el cuerpo del 3cer procedimiento era así:
create procedure sp_procedure3
as
begin
--Muchas Validaciones....
.
.
.
select @va_retorno as va_retorno
end
Este tercer procedimiento devolvía un valor y además estaba siendo llamado por el 2do procedimiento pero que estaba en un while, como hacer esto?? Aunque me demoré un poco, valió la pena aprender, les comparto:
1. Cree una variable tipo table
2. Use el insert into
Lo más importante sería esto, porque después de almacenar lo que retorna el procedimiento 3 puedes tratar como se te antoje estos datos. Mas o menos quedó así:
create procedure sp_procedure2
as
begin
declare @result table (id int identity, valor int)
declare @n int=1
while n<=10
begin
inser into @result(valor)
exec sp_procedure3
set @n=@n+1
end
end
Se que tendrán muchas preguntas, porque tal vez no se entendió la idea, sin embargo pueden hacerme llegar sus dudas, preguntas que gustosamente trataré de ayudarles. Hasta la próxima.
No hay comentarios:
Publicar un comentario