Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como exportar dados do banco para arquivo texto (CLR, OLE, BCP)

Post Views 38,880 views
Reading time 14 minutes

Olá pessoal,
Boa noite!

Depois de escrever meu post anterior, onde falei sobre Como importar arquivos de texto para o banco (OLE Automation, CLR, BCP, BULK INSERT, OPENROWSET), acabei me animando pra escrever a parte 2, que é o processo inverso, ou seja, exportar os dados do SQL Server para um arquivo de texto, que é exatamente esse post.

Muitas vezes precisamos exportar dados de forma fácil para um arquivo de texto e já vi vários desenvolvedores ou DBA’s desesperados porque não sabem como fazer isso de forma eficiente.

Vamos resolver isso de uma vez por todas.

Exportando pelo SQL Server Management Studio

Como exportar dados pelo SQL Server Management Studio

Sem dúvida, a forma mais simples e fácil de exportar dados para arquivo no SQL Server é utilizando a própria interface da ferramenta, que é o Management Studio.

Na tela de Object Explorer, clique com o botão direito sobre o database que contém as tabelas que você deseja exportar e selecione a opção “Tasks” -> “Export Data…”
SQL Server - Export data to text file with Management Studio

Nesta tela, você deve escolher a fonte de origem dos dados, configurar os dados de conexão e o database que você irá exportar
SQL Server - Export data to text file with Management Studio 2

Nesta tela, você deve escolher a fonte de destino dos dados. Para arquivo, escolhi “Flat File Destination”. Podemos definir onde será gravado o arquivo com os dados, codificação dos caracteres (ISO-8859, UTF-8, etc), o formato dos dados no arquivo (delimitado por algum caractere, tamanho fixo ou alinhado à direita), o qualificador do texto (ex: se você definir o aspas como qualificador, a sua senha será algo assim: “Dirceu”;”29″;”DBA”) e definir se a primeira linha conterá o cabeçalho da tabela.
SQL Server - Export data to text file with Management Studio 3

Nesta tela, você pode definir se você quer selecionar os objetos que deseja exportar (primeira opção) ou quer escrever uma query e o resultado da query será exportado para o arquivo. Para este exemplo, vou escolher a primeira opção.
SQL Server - Export data to text file with Management Studio 4

Aqui você pode escolher o objeto que será exportado e definir o formato de quebra de linha (Windows = CRLF, UNIX = LF) e o caractere delimitador de colunas
SQL Server - Export data to text file with Management Studio 5

Por fim, nesta tela você define se já quer exportar os dados (Run immediately) e se você desejar gerar um package do Integration Services (SSIS) caso queira automatizar essa tarefa como um Job pelo SQL Agent ou executá-la manualmente sem precisar configurar tudo de novo.
SQL Server - Export data to text file with Management Studio 6

SQL Server - Export data to text file with Management Studio 7

SQL Server - Export data to text file with Management Studio 8

Embora isso seja simples, para exportar várias tabelas isso acaba sendo trabalhoso e nada prático. Por este motivo, eu vou explicar mais abaixo como fazer isso via T-SQL.

Exportando pelo BCP (Bulk Copy)

Como exportar dados do SQL Server para arquivo txt com BCP

Essa é uma das opções mais utilizadas pelos DBA’s, pois é simples, já vem instalada com o SQL Server e pode ser executada tanto em packages SSIS quanto em stored procedures (utilizando xp_cmdshell)

Lembrando que para utilizar o BCP, você precisará ativar o recurso xp_cmdshell. Eu particularmente não gosto de utilizar o xp_cmdshell e nem de deixar habilitado em uma instância, pois permite inúmeras vulnerabilidades e qualquer comando do Prompt do Windows pode ser executado com esse recurso habilitado.

Para ativar a feature e permitir o xp_cmdshell, execute os seguintes comandos:

Usage example:

SQL Server - Export data to CSV with BCP out queryout Results

Onde:
– out e queryout permitem definir a forma de exportação dos dados. OUT exporta um objeto e o QUERYOUT o resultado de uma query.
– -c define que todos os campos serão exportados como caracter (string)
– -t; permite definir o separador dos campos, não limitando-se a apenas 1 caractere como separador. No primeiro exemplo, estou utilizando o “;” como separador de coluna.
– -T serve para informar que a conexão será realizada no modo Trusted Connection (Autenticação Windows). Caso você queira utilizar autenticação SQL Server, basta utilizar -Uusuario e -Psenha.
– -S serve para informar o servidor\instância que você deseja se conectar.

Definições de parâmetros do BCP:
BCP Help

Exportando com OLE Automation

Como exportar arquivos de texto para o banco com OLE Automation

Para quem não conhece esse recurso, ele permite que o DBA ou Desenvolvedor execute uma série de ações no banco de dados usando OLE DB, como leitura/escrita/movimentação/cópia/deleção de arquivos, criação de planilhas no Excel e mais uma série de coisas. A sintaxe é um pouco parecida com o VBA e utiliza a API do Windows para essas operações.

Para essa finalidade, vamos utilizar as Stored Procedures stpEscreve_Arquivo_FSO e SaveDelimitedColumns, conforme demonstrado abaixo:

Código-fonte da Procedure stpEscreve_Arquivo_FSO

Código-fonte da Procedure SaveDelimitedColumns
Para visualizar o código-fonte dessa procedure, criada pelo John Buoro, acesse este link ou abaixo:

Usage example:

SQL Server - Export data to text file with OLE Automation 2

Exportando com Common Language Runtime (CLR)

Como exportar arquivos de texto para o banco com CLR

O CLR permite que você consiga criar rotinas (stored prodecures, functions, triggers, etc) escritas em C#, F# e VB.NET, compilá-las e executá-las no banco de dados nativamente, estendendo as capacidades do SGBD, pois é possível criar uma infinidade de coisas que não seriam possíveis utilizando apenas o Transact-SQL, como manipulação de arquivos, upload e download de arquivos via FTP, funções de agregação, integração com Webservices e muito mais.

Para essa finalidade, vamos utilizar Stored Procedures stpExporta_Query_Txt e stpEscreve_Arquivo, conforme demonstrado abaixo:

Código-fonte da procedure stpExporta_Query_Txt

Código-fonte da procedure stpEscreve_Arquivo

Usage example:

SQL Server - Export data to CSV with CLR (C#) Results

And that's it, folks!
Até o próximo post.

sql server exportar dados arquivo texto txt export data text files from database do banco de dados

sql server exportar dados arquivo texto txt export data text files from database do banco de dados