none
Retorno de Store Procedure para tabela com busca sequencial incremental RRS feed

  • Pergunta

  • Boa tarde galera...estou com um problema. Executo uma SP e tenho um retorno ao qual desejo jogar em uma tabela...até ae tudo bem..o problema é que um desses campos utilizados para o retorno possui 240000 mil registros..é um ID incremental. A SP executada é assim

    exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF=1 , @D1='01/01/2005', @D2='12/31/2012'

    o resultado dela é:

    PAC         PACIENTE                                 LOCAL                                      MEDICO 

    157264      Sr. X                                      SERVICO DE PRONTO ATENDIMENTO        xxxxxxxxxxxxxxxxxx 

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------

    ESP DAT     DPA                    DAM LEITO

    CLINICO GERAL  2004-12-30 11:20:00.000 2005-01-04 12:37:54.610 2005-01-04 12:38:00.000 NULL

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    RESPONSAVEL                                          PAC

    Sr. X                                   157264

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------

    Todo esse resultado sai em apenas 1 linha. Logo, como podemos ver, possuo uma variável chamada  @PF que vai de 1 até 240000. 

    O que desejo é algum código que me possibilite executar e ele mesmo ir inserido linha a linha dentro da tabela, da seguinte maneira:

    Logo que executar o código, ele jogue o valor 1 na variável @PF e o resultado deste select seja inserido em uma tabela...depois de maneira automática ele insere o valor 2 na variável @PF e o resultado deste select seja inserido na mesma tabela na linha 2...assim, terei 240000 linhas com o resultado destes selects executados pela SP, porem, em uma tabela sequencial de 1 à 240000.

    Teria como alguém me ajudar a montar esse código???

     


    Rombesso



    segunda-feira, 5 de novembro de 2012 16:37

Respostas

  • Cara,

    Ou você cria uma tabela para controlar essa sequencia de número

    ou

    Você seta sempre o valor da variável como o total de linhas + 1

    Set @Minhavariavel = (Select Count(*) from minha_tabela)

    Set @Minhavariavel = @Minhavariavel + 1

    E ai faz o que tem que fazer, Inserção etc...

    Atenciosamente,

    Samuel dos Anjos


    Atenciosamente, Samuel dos Anjos

    segunda-feira, 5 de novembro de 2012 23:49
  • Samuel, esta proc é executada de qto em qto tempo? Ou uma única vez?

    "monte" o comando deste modo, isso se for executa de uma só vez:

    declare @sql varchar(max)
    
    declare @qtde varchar(max)
    set @qtde = 50
    
    while @qtde > 0
    begin
    	
       select @sql = 'exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         select (@sql)
         set @qtde = @qtde - 1
     end
     

    Note que no meu exemplo, eu passo um valor fixo, mas você pode calcular. Isso é uma ideia.

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:40
    sexta-feira, 9 de novembro de 2012 17:31
  • Edgar,

    É só adaptar o script que você roda na mão para rodar no while que o Advaldo fez.

    Ficaria mais ou menos assim

    declare @sql varchar(max)
    declare @qtde varchar(max)
    set @qtde = 240000 
    while @qtde > 0
    begin
    	 Select @sql = 'insert into migra(pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    					exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         select (@sql)
         set @qtde = @qtde - 1
     end


    [ ]´s,
    Lukas Baldan

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:39
    quarta-feira, 14 de novembro de 2012 11:34
  • Edgar isso é para você conferir os scripts.

    para executar substitua o select pelo exec

    declare @sql varchar(max)
    declare @qtde varchar(max)
    set @qtde = 240000 
    while @qtde > 0
    begin
    	 Select @sql = 'insert into migra(pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    					exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         EXEC(@sql)
         set @qtde = @qtde - 1
     end


    [ ]´s,
    Lukas Baldan

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:39
    quarta-feira, 14 de novembro de 2012 12:40
  • Vlw Lukas...funcionou perfeitamente...desculpe pedir uma coisa tão básica, mas ando meio sei cabeça para mexer com isso....fiz uma alteração no loop pois ele vinha em ordem decrescente...alterei para uma ordem crescente e funcionou perfeitamente.

    Tks...

    Ficou assim

    declare @sql varchar(max)
    declare @qtde varchar(max)
    set @qtde = 1 
    while @qtde < 12
    begin
    	 Select @sql = 'insert into migra(npf, pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    					exec PNX_45_HISTORICO_GERAL @T=3, @OP=1, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         EXEC(@sql)
         set @qtde = @qtde + 1
     end



    Rombesso

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:39
    quarta-feira, 14 de novembro de 2012 13:39

Todas as Respostas

  • Cara,

    Ou você cria uma tabela para controlar essa sequencia de número

    ou

    Você seta sempre o valor da variável como o total de linhas + 1

    Set @Minhavariavel = (Select Count(*) from minha_tabela)

    Set @Minhavariavel = @Minhavariavel + 1

    E ai faz o que tem que fazer, Inserção etc...

    Atenciosamente,

    Samuel dos Anjos


    Atenciosamente, Samuel dos Anjos

    segunda-feira, 5 de novembro de 2012 23:49
  • Samuel,

    Entendi sua lógica, porém não vejo como montar um código com ela...


    Rombesso

    terça-feira, 6 de novembro de 2012 16:27
  • Samuel, esta proc é executada de qto em qto tempo? Ou uma única vez?

    "monte" o comando deste modo, isso se for executa de uma só vez:

    declare @sql varchar(max)
    
    declare @qtde varchar(max)
    set @qtde = 50
    
    while @qtde > 0
    begin
    	
       select @sql = 'exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         select (@sql)
         set @qtde = @qtde - 1
     end
     

    Note que no meu exemplo, eu passo um valor fixo, mas você pode calcular. Isso é uma ideia.

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:40
    sexta-feira, 9 de novembro de 2012 17:31
  • Advaldo, é o Edgar que está precisando de ajuda.


    Atenciosamente,
    Samuel dos Anjos

    Atenciosamente, Samuel dos Anjos

    sexta-feira, 9 de novembro de 2012 21:58
  • Advaldo,

    Achei legal...era exatamente o que o Samuel estava propondo...vou testar e lhe informo se funcionou...tks


    Rombesso

    segunda-feira, 12 de novembro de 2012 17:01
  • Advaldo,

    Não funcionou 100%...ao rodar isso ele me exibe os seguintes resultados:

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF=5 , @D1='01/01/2005', @D2='12/31/2012'

    (1 row(s) affected)


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF=4 , @D1='01/01/2005', @D2='12/31/2012'

    (1 row(s) affected)


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF=3 , @D1='01/01/2005', @D2='12/31/2012'

    (1 row(s) affected)


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF=2 , @D1='01/01/2005', @D2='12/31/2012'

    (1 row(s) affected)


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF=1 , @D1='01/01/2005', @D2='12/31/2012'

    (1 row(s) affected)

    Ele exibiu a própria SP em ordem decrescente, sendo que ele deveria exibir os dados acima citados e a cada vez que ele efetuasse a leitura da sp, ele deveria fazer um INSERT INTO em uma tabela chamada xxxxx .


    Rombesso

    terça-feira, 13 de novembro de 2012 19:04
  • Cara,

    Posta o código da sua proc ai.



    Atenciosamente,
    Samuel dos Anjos

    Atenciosamente, Samuel dos Anjos

    terça-feira, 13 de novembro de 2012 23:42
  • Samuel,

    Estou fazendo assim para executar a procedure e jogar o resultado dela dentro de uma tabela, o problema é na variável @PF eu tenho 240000 números, assim eu teria que rodar ela essa quantidade de vezes na mão...queria um loop da maneira que o Advaldo propôs, mas não estou sabendo fazer... 

    insert into migra(pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=1, @PF=1, @D1='01/01/2005', @D2='11/15/2012'

    rodou uma vez e preencheu a tabela migra com o resultado....ae eu rodo novamente na mão

    insert into migra(pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    exec PNX_45_HISTORICO_GERAL @T=3, @OP=1, @PF=2, @D1='01/01/2005', @D2='11/15/2012'

    Entendeu a sequencia....


    Rombesso

    quarta-feira, 14 de novembro de 2012 10:22
  • Edgar,

    É só adaptar o script que você roda na mão para rodar no while que o Advaldo fez.

    Ficaria mais ou menos assim

    declare @sql varchar(max)
    declare @qtde varchar(max)
    set @qtde = 240000 
    while @qtde > 0
    begin
    	 Select @sql = 'insert into migra(pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    					exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         select (@sql)
         set @qtde = @qtde - 1
     end


    [ ]´s,
    Lukas Baldan

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:39
    quarta-feira, 14 de novembro de 2012 11:34
  • Legal Lukas, 

    Porem o resultado do select inicial do begin apenas mostra um print em tela conforme informei pro Adnaldo acima, o insert into não funcionou....

    Sua procedure não dá erro, porém ela não insere o resultado na tabela...só faz um print....


    Rombesso

    quarta-feira, 14 de novembro de 2012 12:07
  • Edgar isso é para você conferir os scripts.

    para executar substitua o select pelo exec

    declare @sql varchar(max)
    declare @qtde varchar(max)
    set @qtde = 240000 
    while @qtde > 0
    begin
    	 Select @sql = 'insert into migra(pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    					exec PNX_45_HISTORICO_GERAL @T=3, @OP=0, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         EXEC(@sql)
         set @qtde = @qtde - 1
     end


    [ ]´s,
    Lukas Baldan

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:39
    quarta-feira, 14 de novembro de 2012 12:40
  • Vlw Lukas...funcionou perfeitamente...desculpe pedir uma coisa tão básica, mas ando meio sei cabeça para mexer com isso....fiz uma alteração no loop pois ele vinha em ordem decrescente...alterei para uma ordem crescente e funcionou perfeitamente.

    Tks...

    Ficou assim

    declare @sql varchar(max)
    declare @qtde varchar(max)
    set @qtde = 1 
    while @qtde < 12
    begin
    	 Select @sql = 'insert into migra(npf, pac, paciente, local, medico, esp, dat, dpa, dam, leito, responsavel, pac2)
    					exec PNX_45_HISTORICO_GERAL @T=3, @OP=1, @PF='+ @qtde +' , @D1=''01/01/2005'', @D2=''12/31/2012'''
         EXEC(@sql)
         set @qtde = @qtde + 1
     end



    Rombesso

    • Marcado como Resposta Edgar Rombesso quarta-feira, 14 de novembro de 2012 13:39
    quarta-feira, 14 de novembro de 2012 13:39