none
Store de Procedure "Select com insert" RRS feed

  • Pergunta

  •  

    Boa Tarde,

     

    Tenho uma SP onde executo um select para filtrar alguns dados de uma determinada tabela, no entanto preciso incluir os dados selecionados em uma segunda tabela, gostaria de ter algumas dicas de como posso estar fazendo isso, lembrando que, atraves do "insert into" nao é possivel pois as tabelas tem estruturas diferentes, e o que me interessa do resultado da pesquisas sao apenas alguns campos, segue abaixo o codigo da SP que executo, grato:

     

    declare @Mes nvarchar(2),
    @Ano nvarchar(4),
    @Sistema as nvarchar(4),
    @Campo nvarchar(1000),
    @CodParametro as nvarchar(4),
    @Comando_SQL nvarchar(4000),
    @Clausula_Where nvarchar(4000),
    @Clausula_Or nvarchar(4000),
    @Parametros nvarchar(4000),
    @Tabela nvarchar(4000),
    @Nome_Tabela nvarchar(1000),
    @Tipo as nvarchar(2),
    @Tipo1 as nvarchar(2),
    @Registros money,
    @Registros1 int,
    @Reg money

     

    set @Sistema='0001'
    set @Ano='2007'
    set @mes='01'
    set @Tipo = 'RE'
    set @Tipo1 = 'RS'
    Set @Tabela = N'dbo.TBResultado_Analises'
    Set @Parametros =
    N'@Reg money Output'
    set @CodParametro='0175'
    set @Campo= '[Turbidez]'

     

    set @Clausula_Where = N' Where ' + @Campo + '>5 ' +  'and codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano + 'and codigoponto < ' + '141'


    set @Clausula_Or= N' or ' + @Campo + '>5 ' + ' and codigodosistema = '+
    ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo1+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano

     

    Set @Comando_SQL = N'SELECT ' + @Campo + ',codigocomunidade,tipoagua,codigoponto,datacoleta,horacoleta from ' + @Tabela + @Clausula_Where + @Clausula_Or

     

    EXECUTE SP_ExecuteSql @Comando_Sql

     

    If @@RowCount > 0
         
    preciso inserir o resultado dos campos retornados em @Comando_SQL em uma segunda tabela.

     

     

     


    quarta-feira, 2 de maio de 2007 17:59

Todas as Respostas

  •  

     se o result set da query dinamica tiver as mesmas colunas da tabela que vc. quer inserir vc. pode usar

     

      insert into tabela SP_ExecuteSql @Comando_Sql

     

    Abs;

    quarta-feira, 2 de maio de 2007 18:30
  • Marcelo, boa tarde

     

    Conforme descrevi acima, a minha segunda tabela nao possui as mesmas caracteristicas de estrutura que o resultado da minha SP_ExecuteSql @Comando_Sql, na verdade é esse o meu problema.

    quarta-feira, 2 de maio de 2007 20:16
  • uma solucao entao seria alimentar uma tabela temporaria com o retorno do executesql e depois fazer um insert into tabela .... select campos from tabelatemporaria

     

    veja se akjuda qualquer coisa retorne.

     

    Abs;

    quinta-feira, 3 de maio de 2007 09:52
  • Marcelo segui a sua sugestão de criar uma tabela temporaria com o resultado e posteriormente fazer um insert into no entanto quando tento executar o insert into da tabela temporaria para a tabela de destino esta dando o seguinte erro:

     

    Column name or number of supplied values does not match table definition.

     

    Ja verifiquei as colunas das duas tabelas e os campos sao do mesmo tipo, no entanto estaou tendo o erro, o estranho de tudo isso é que estou tentando fazer um insert into bem simples utilizando apenas uma coluna, segue abaixo um exemplo do que fiz:

     

    declare @Mes nvarchar(2),
    @Ano nvarchar(4),
    @Sistema as nvarchar(4),
    @Campo nvarchar(1000),
    @CodParametro as nvarchar(4),
    @Comando_SQL nvarchar(4000),
    @Clausula_Where nvarchar(4000),
    @Clausula_Or nvarchar(4000),
    @Parametros nvarchar(4000),
    @Tabela nvarchar(4000),
    @Nome_Tabela nvarchar(1000),
    @Tipo as nvarchar(2),
    @Tipo1 as nvarchar(2),
    @Registros money,
    @Registros1 int,
    @Registros2 int,
    @Registros3 int,
    @Registros4 int,
    @Retorno int,
    @Reg money

    set @Sistema='0001'
    set @Ano='2007'
    set @mes='01'
    set @Tipo = 'RE'
    set @Tipo1 = 'RS'
    Set @Tabela = N'dbo.TBResultado_Analises'
    Set @Parametros = N'@Reg money Output'
    set @CodParametro='0175'
    set @Campo= '[Turbidez]'

    set @Clausula_Where = N' Where ' + @Campo + '>5 ' +  'and codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano + 'and codigoponto < ' + '141'
    set @Clausula_Or= N' or ' + @Campo + '>5 ' + ' and codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo1+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano

    Set @Comando_SQL = N'SELECT CodigoDoSistema,CodigoComunidade,TipoAgua,CodigoPonto,DataColeta,HoraColeta,' + @Campo + ' as resultado into tabela from ' + @Tabela + @Clausula_Where + @Clausula_Or

    EXECUTE SP_ExecuteSql @Comando_Sql                        até aqui funciona corretamente

     

     

    insert into tbAnalisesForaPadrao_SecretariaSaude          aqui da o erro mencionado acima
           select CodigoDoSistema
           from tabela

     

     

    quinta-feira, 3 de maio de 2007 11:10
  • Linaldo,

     

    Você esta declarando para o Insert a mesma quantidade e ordem das colunas declaradas no select?

    quinta-feira, 3 de maio de 2007 11:17
  •  

    Junior,

     

    Ja dei um jeito no erro, seguindo a sintaxe abaixo:

     

    INSERT INTO tbAnalisesForaPadrao_SecretariaSaude
                          (CodigoDoSistema,codigocomunidade,tipoagua,codigoponto,datacoleta,horacoleta,resultado,codigodoparametro)
    SELECT     CodigoDoSistema,codigocomunidade,tipoagua,codigoponto,datacoleta,horacoleta,resultado,'A'
    FROM         tabela

     

     

    Grato

    quinta-feira, 3 de maio de 2007 14:26
  • Linaldo,

     

    Legal, obrigado pelo retorno.

    quinta-feira, 3 de maio de 2007 16:29
  • O problema aí era na última coluna, que nao recebia o valor fixo 'A' que foi incluso na segunda versao do seu insert into.... abracao.
    sábado, 5 de maio de 2007 23:35
  • O problema aí era a coluna "codigodoparametro" que nao recebia valor algum atraves do select. Isto foi solucionado na segunda versao da SP fixando o valor 'A' para esta última coluna (codigodoparametro).
    sábado, 5 de maio de 2007 23:37