Usuário com melhor resposta
Como chamar uma procedure a cada linha de outra procedure?

Pergunta
-
Bom dia!
Tenho duas procedures, a primeira é a principal, a segunda, precisa ser executada a cada linha da procedure principal,
ou seja,
os valores da primeira devem ser passados para a segunda e retornar um campo, para cada linha.
Como fazer isso???
Obrigado pessoal.
Marcelo.
Respostas
-
Marcelo,
Você pode fazer isso utilizando um CURSOR ou o WHILE, sempre armazenando os parâmetros na procedure principal em variáveis, como for necessário, para executar a segunda procedure em um "loop". Abaixo segue uma idéia de como você pode montar esta solução utilizando WHILE.
CREATE PROC P_EXEMPLO AS DECLARE @VALOR VARCHAR(10) DECLARE @POS INT DECLARE @DELIMITADOR CHAR(1) DECLARE @VALORES VARCHAR(40) SET @VALORES ='12345,67890,321,654,987' SET @DELIMITADOR = ',' SET @VALORES = @VALORES + @DELIMITADOR SET @POS = CHARINDEX(@DELIMITADOR, @VALORES) WHILE (@POS <> 0) BEGIN SET @VALOR = SUBSTRING(@VALORES, 1, @POS - 1) EXEC (PROC P_EXEMPLO2 @VALOR) SET @VALORES = SUBSTRING(@VALORES,@POS + 1,LEN(@VALORES)) SET @POS = CHARINDEX(@DELIMITADOR, @VALORES) END GO
Espero que seja útil para você.
Abraços,
Durval Ramos
Microsoft Partner | MTA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 25 de outubro de 2013 16:48
- Marcado como Resposta Giovani Cr quarta-feira, 30 de outubro de 2013 16:48
-
Marcelo,
Você destacou que os valores da primeira tem que ser passado para segunda!!!
Neste caso minha sugestão é que você armazene os resultados em variáveis para serem passadas para segunda, uma possibilidade é trabalhar com parâmetros do tipo Output na primeira, ou então, gravar os dados em uma table que depois poderá ser utilizada pela segunda.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 16:43
- Marcado como Resposta Giovani Cr quarta-feira, 30 de outubro de 2013 16:48
Todas as Respostas
-
Marcelo,
Você pode fazer isso utilizando um CURSOR ou o WHILE, sempre armazenando os parâmetros na procedure principal em variáveis, como for necessário, para executar a segunda procedure em um "loop". Abaixo segue uma idéia de como você pode montar esta solução utilizando WHILE.
CREATE PROC P_EXEMPLO AS DECLARE @VALOR VARCHAR(10) DECLARE @POS INT DECLARE @DELIMITADOR CHAR(1) DECLARE @VALORES VARCHAR(40) SET @VALORES ='12345,67890,321,654,987' SET @DELIMITADOR = ',' SET @VALORES = @VALORES + @DELIMITADOR SET @POS = CHARINDEX(@DELIMITADOR, @VALORES) WHILE (@POS <> 0) BEGIN SET @VALOR = SUBSTRING(@VALORES, 1, @POS - 1) EXEC (PROC P_EXEMPLO2 @VALOR) SET @VALORES = SUBSTRING(@VALORES,@POS + 1,LEN(@VALORES)) SET @POS = CHARINDEX(@DELIMITADOR, @VALORES) END GO
Espero que seja útil para você.
Abraços,
Durval Ramos
Microsoft Partner | MTA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 25 de outubro de 2013 16:48
- Marcado como Resposta Giovani Cr quarta-feira, 30 de outubro de 2013 16:48
-
Marcelo,
Você destacou que os valores da primeira tem que ser passado para segunda!!!
Neste caso minha sugestão é que você armazene os resultados em variáveis para serem passadas para segunda, uma possibilidade é trabalhar com parâmetros do tipo Output na primeira, ou então, gravar os dados em uma table que depois poderá ser utilizada pela segunda.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 16:43
- Marcado como Resposta Giovani Cr quarta-feira, 30 de outubro de 2013 16:48