none
Bulk Insert de uma tabela RRS feed

  • Pergunta

  • Bom dia,

    Existe uma forma que eu possa fazer bulk insert com informações vindas de uma outra tabela, ao invés de um arquivo texto?

    Se não, como faço para utilizar o bulk insert para exportar para um txt e daí para a tabela?

    desde já agradeço

    Denis Donato


    Denis Donato - Programador .Net


    • Editado Denis Donato segunda-feira, 12 de novembro de 2012 13:24 erro gramatical
    sexta-feira, 9 de novembro de 2012 12:58

Respostas

  • Caros, obrigado pela ajuda, mas uma nova coluna é fora de cogitação pelo fato da aplicação que vai rodar nele já está desenvolvida para o banco como está, e ja temos alguns bancos rodando assim, vou analisar os problemas que fazem essa atualização demorar tanto entao.

    Muito obrigado


    Denis Donato - Programador .Net

    • Marcado como Resposta Denis Donato segunda-feira, 12 de novembro de 2012 13:26
    segunda-feira, 12 de novembro de 2012 13:26

Todas as Respostas

  • Bom dia Denis !

    se voce ja tem as 2 tabelas no seu servidor, não precisaria do bulk insert, seria somente um insert simples:

    insert into tabela1 (campo1, campo2, campo3, etc)

    select campo1, campo2,campo3, etc from tabela2


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sexta-feira, 9 de novembro de 2012 13:19
  • Bom dia Alexandre, 

    sim, eu tenho as duas tabelas no mesmo servidor, mas é mais complicado que isso, são muitos registros (muitos mesmo, a ponto de rodar horas em insert comum), gostaria de executar o processo com velocidade.

    att

    Denis Donato


    Denis Donato - Programador .Net

    sexta-feira, 9 de novembro de 2012 13:37
  • Denis, voce chegou a fazer um teste de performance fazendo o insert em uma amostra de registros ? digo isto por que tenho processos diarios que em um simples insert inserem mais de 10 milhões de registros de uma tabela em outra e leva menos de 10 minutos.

    O bulk insert é somente para importar arquivos de fora do SQL, não podendo fazer isto entre tabelas, como voce disse se for o caso de exportar para um arquivo texto e importar novamente utilizando o bulk insert, te aconselharia a utilizar o BCP para exportar as tabelas para arquivos texto, segue uma documentação de como utilizar o BCP:

    http://msdn.microsoft.com/pt-br/library/ms162802.aspx


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sexta-feira, 9 de novembro de 2012 13:54
  • Denis Donato,

    concordo com o Alexandre. 

    O processo de Bulk deve ser utilizado somente para arquivos/bancos externos.
    Também tenho processo com milhões de registros que vão de tabela a tabela em minutos ou até segundos.
    No meu caso, em algumas tabelas, eu precisei indexar alguns indices e particiona-los, será que não é este seu caso? Como esta o plano de execução deste insert?

    sexta-feira, 9 de novembro de 2012 17:37
  • Alexandre, Advaldo

    Obrigado pela ajuda primeiramente,

    Segundo tenho o seguinte cenário:

    Tenho vários bancos que precisam ser atualizados, nesses bancos tenho algumas tabelas cuja primary key não são identity, e para utilizar a nova versão da nossa ferramenta essas devem ser identity, atualmente o script que utilizamos faz o seguinte:

    1. Apaga as foreing keys;

    2. Copia todo o conteudo das tabelas que vao ser atualizadas para tabelas temporarias;

    3. Apaga as tabelas originais, ficando somente as temporárias;

    4. Recria as tabelas, dessa vez com as chave-primarias com identity;

    5. Insere o conteúdo das tabelas temporárias nas tabelas finais usando o comando SET IDENTITY_INSERT [tabela] OFF;

    6. Recria as foreing keys e apaga as tabelas temporárias;

    O problema é que toda vez que executo isso, é meio dia, as vezes mais tempo perdido, e nesse que estou agora, rodou um dia inteiro e não concluiu, existe uma forma de fazer isso mais performaticamente?

    P.S. Após seus posts vi que não tenho tantos registros, acredito que a tabela com mais registros não chegue a um milhão, e ainda assim demora muito.


    Denis Donato - Programador .Net

    sexta-feira, 9 de novembro de 2012 19:00
  • Denis, somente para entender, voce copia os dados das tabelas originais para temporaria, depois apaga as tabelas originais e depois recria as tabelas originais com identity e insere o conteudo das temporarias nas originais, não seria melhor voce deixar as tabelas originais com identity e inserir somente os novos registros das temporarias ? Assim não seria tambem necessario toda vez apagar e recriar as FKs.

    Se a tabela que voce tem mais registros não chega a 1 milhão e demora muito para um simples insert ha algo de errado no seu servidor que teria que ser analisado por que podem ser varias coisas, problemas com indices, constraints desnecessarias, fragmentação dos discos, etc...


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sexta-feira, 9 de novembro de 2012 19:09
  • Alexandre, numa tabela que já contém registros, tem como eu simplesmente mudar a primary para identity? Desculpa se a pergunta for boba, mas meus conhecimentos de sql são realmente limitados, se sim, como procedo?

    att


    Denis Donato - Programador .Net

    segunda-feira, 12 de novembro de 2012 13:05
  • Bom dia Denis ! Não sei se voce conseguiria mudar uma coluna ja existente para identity, não sei se o SQL permite e tambem poderia ter falhar no identity desta coluna, o que voce poderia fazer seria adicionar uma coluna identity a sua tabela, ex:

    alter table [nome da tabela] ADD [nome da coluna] int identity (1,1)
    


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 12 de novembro de 2012 13:18
  • Caros, obrigado pela ajuda, mas uma nova coluna é fora de cogitação pelo fato da aplicação que vai rodar nele já está desenvolvida para o banco como está, e ja temos alguns bancos rodando assim, vou analisar os problemas que fazem essa atualização demorar tanto entao.

    Muito obrigado


    Denis Donato - Programador .Net

    • Marcado como Resposta Denis Donato segunda-feira, 12 de novembro de 2012 13:26
    segunda-feira, 12 de novembro de 2012 13:26