Rotina para exportar dados para o formato texto via BCP

DBA e Consultor de Banco de Dados

Rotina para exportar dados para o formato texto via BCP

Tempo de leitura: 7 minutos

Fala Galerinha!

Espero que estejam todos bem!!

No post de hoje vou compartilhar com vocês uma procedure muito útil que serviu de base para resolver uma necessidade de um cliente.

O cenário era o seguinte. O Cliente tinha algumas tabelas no seu banco de dados e precisava exportar esses dados diariamente para arquivos .txt de maneira automática uma vez por dia.

Existem algumas maneiras de se fazer isso, inclusive nativamente no SQL Server por meio do assistente de “Import/Export”. No entanto, utilizando esse assistente o processo fica manual.

Era necessário todos os dias atualizar esses dados em um diretório de saída.

Vamos fazer uma breve demonstração de como exportar uma tabela para .txt via assistente “Import/Export Data” manualmente e depois demonstrar a solução que pode ser automatizada.

Clique com o botão direito do mouse em cima do banco de dados no seu “SQL Server Management Studio”, depois vá em “tasks” ou (tarefas) e selecione a opção “Export Data”.

Siga os passos a seguir:

Clique em Next >.

Nas opções de Origem selecione a fonte de dados ao qual deseja exportar os seus dados. Nesse caso a origem dos nossos dados é uma tabela do banco “Teste_Blog” que está dentro do próprio SQL Server. Então selecionamos a opção SQL Server Native Client 11.0.

Feito isso, informe suas credenciais de acesso ao banco, selecione sua base de dados de origem e clique em Next >.

Agora vamos selecionar a etapa de destino, ou seja, para qual fonte de dados desejamos exportar os nossos dados. Neste exemplo, vamos selecionar a opção “Flat File Destination” para realizar a exportação para um arquivo de texto.

Em “Browse” selecione o local e o arquivo que deseja exportar os seus dados, você também pode selecionar um delimitador para exportar os seus arquivos, neste exemplo no campo “Text qualifier”, utilizamos um ponto e vírgula, para separar as colunas. Outra opção bastante utilizada é a flag “Column names in the first data row” que sinaliza que a primeira linha se refere ao cabeçalho da sua tabela.

Clique em Next >.

Nessa etapa, você pode selecionar uma tabela ou escrever uma query para exportar os seus dados. Bem legal né? ?

Neste caso vamos manter a primeira opção, clique em Next >.

Selecione a tabela que deseja exportar, neste exemplo, minha tabela chama-se “Usuário”. Clique em Next >.

Marque a opção “Run Immediately” e clique em Next >.

Pronto! Os dados da tabela usuário foram exportados com sucesso, agora vamos conferir o nosso arquivo de saída. ?

Show de bola. mas esse processo foi feito todo manualmente.

Agora vamos para a solução que pode ser automatizada que comentei no início do post.

Primeiramente é importante ponderar que essa procedure utiliza o conceito de BCP para exportar os arquivos, ou seja, o BCP (Bulk Copy) é uma ferramenta de linha de comandos que usa a API do BCP (Programa de cópia em massa).

Para utilizá-la no SQL Server é necessário habilitar o “xp_cmdshell”. (Existem certos riscos relacionados a segurança em deixar habilitado esse assistente de linhas de comando dentro do SQL Server, visto que isso em mãos erradas pode fazer um estrago muito grande no seu sistema operacional. Porém, isso é pauta para outras abordagens).

Para maiores informações acesse o link abaixo :

https://docs.microsoft.com/pt-br/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server?view=sql-server-ver15

Para habilitar o “xp_cmdshell” execute os comandos abaixo:

Seguindo, com o nosso processo, essa procedure eu encontrei lá no blog do SQL Server Central, link abaixo.

https://www.sqlservercentral.com/scripts/dynamic-sql-for-convert-table-to-flat-file-using-bcp

Faça a criação da procedure [usp_bcpTableUnload] na sua base de dados.

Segue o script:

Para exportar os dados através da procedure, preencha os parâmetros de acordo com a sua necessidade, segue um exemplo:

Ao consultar o nosso arquivo de saída, teremos as informações exportadas.

Feito!!

Agora para automatizar, basta colocar essa procedure dentro de um Job e agendar de acordo com a sua necessidade.

Tem um artigo muito interessante do mestre Dirceu Resende, demonstrando algumas maneiras também de realizar exportações para texto.

https://www.dirceuresende.com/blog/sql-server-como-exportar-dados-do-banco-para-arquivo-texto-clr-ole-bcp/

Não deixem de conferir!!

E aí, gostou?

Qualquer dúvida deixe nos comentários.

Abraços.

Gustavo Larocca

Consultor SQL Server

 

8 comentários

  1. Emerson Samuel disse:

    Post muito bem escrito, estruturado de uma forma excelente, com imagens do passo a passo, scripts e links para uma leitura complementar. Parabéns!

  2. Post muito útil! Mais um pra salvar aqui e que deve me ajudar no futuro também =)

    Abraço,
    Luiz Vitor

  3. Eduardo Rabelo disse:

    Ja me salvou uma vez com este script! Bem personalizavel, top demais 🙂

  4. Wesley disse:

    Esse vai para os favoritos.

  5. Edson disse:

    Excelente matéria. Com certeza irá ajudar muita gente.
    Já está nos favoritos.
    Show de bola professor.

  6. Marlon Finholdt Valim Gomes disse:

    Bom ida!
    Na etapa “Configure flat file destination” da exportação manual, não aparece nenhuma tabela para selecionar. Você sabe me dizer porque isso ocorre?
    As etapas anteriores fiz da mesma forma como descrito.

    • Gustavo disse:

      Opa, Fala Marlon, tudo beleza?
      Acredito que seja pq o “Configure Flat File Destination” exija uma fonte de dados que precisa ser um arquivo texto (.Txt) dentro do seu disco rigido e não uma tabela..
      Tentou criar um arquivo “.txt” vazio na sua máquina e tentar exportar os dados do seu data source para ele?

  7. Carlos disse:

    Muito bom o material, parabéns Gustavo.
    Raro encontrar pessoas com disposição para ensinar e passar conhecimento.
    Show!!

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.