Oi! Seja bem-vindo!

Hoje falaremos sobre como importar e exportar arquivos CSV no SQL Server. Embora o XML esteja em alta, o formato CSV (texto delimitado) ainda tem muito espaço devido a ser mais compacto e fácil de trabalhar com o Excel.

Como você sabe, para importar um CSV para o Excel, na maioria das vezes basta um duplo clique, por isso esse formato ainda é bastante popular e nesse artigo vou te mostrar como é fácil trabalhar com ele no SQL Server. Confira o vídeo tutorial abaixo:

Como IMPORTAR e EXPORTAR arquivos CSV no SQL Server

Tanto para importar quanto para exportar, o que não faltam são opções de como fazer isso. Porém, como você já deve ter visto por ai, algumas estratégias são realmente complicadas… por isso separei para você as 3 melhores opções para exportar e a melhor opção para importar um CSV.

3 formas de exportar para CSV

Modo manual – Save AS

A forma mais simples certamente é clicando com o botão direito no resultset de qualquer select, a seguir selecionar “salvar como” e depois CSV. Fácil e intuitivo, porém manual e chato…

exportar manualmente para csv - save as

Modos automáticos SQLCMD e BCP

Usando o SQLCMD ou o BCP a coisa fica bem mais interessante, porque podemos exportar simplesmente executando uma única linha de comando através do “modo SQLCMD” ou do MSDOS.

-- SQLCMD:
-- -S . = Servidor | -d curso = banco de dados | -E = Trusted Connection | -Q = query a ser executada | -o = Arquivo para salvar resultados | -W remove espaços em branco | -s"," = delimitar com , | -h-1 = remover a primeira linha de cabeçalho
!!sqlcmd -S . -d curso -E -Q "set nocount on; select * from amigos" -o "c:\tmp\amigos.csv" -W -s"," -h-1

-- BCP:
-- -c = tipo de informação texto | -t = termino de campo "," | -T = Trusted connection | -S = Servidor | -C ACP = Windows 1252 charset
!!bcp "select * from curso.dbo.amigos" queryout c:\tmp\amigos.csv -c -t, -T -S -C ACP

Qualquer uma das opções acima gera um arquivo equivalente, que pode ser importado para o Excel simplesmente com um duplo clique. Lembrando que para ativar o modo SQLCMD é só clicar em Query e depois em SQLCMD Mode. Após fazer isso você perceberá que as linhas que começam com dois pontos de exclamação “!!” ficarão de uma cor diferente.

ativar sql cmd mode

Como importar um CSV

Na exportação trouxe para você 3 exemplos, porém na importação lhe apresento apenas um, pois ele está tão a frente dos demais métodos em termos de simplicidade, que acaba nem valendo a pena debater outras formas. Estou falando do “bulk insert”, onde para você importar um arquivo CSV basta seguir o exemplo abaixo:


-- Importar dados
bulk insert amigos from 'C:\tmp\amigos.csv' with (fieldterminator = ',', rowterminator = '\n', firstrow = 1, codepage = 'acp')

Script completo usado no vídeo

Para terminar, aqui vai o script completo que usei no vídeo para você poder replicar os testes no seu computador:

------------------------------------------------------------------
-- Como importar e exportar arquivos CSV no SQL Server
------------------------------------------------------------------
------------------------------------------
-- Requisitos
------------------------------------------
-- Banco de testes
use master
if db_id('curso') is not null 
	drop database curso
go
create database curso
go
use curso
go

-- Tabela para testes 
create table amigos (
	id smallint, 
	nm varchar(300),
	telefone varchar(20)
)

-- Carga de teste
insert into amigos values 
	(1, 'Antonio Manso Pacífico', '(11) 9.9999-1111'),
	(2, 'Afília Demaria De Nazaré', '(11) 9.9999-2222'),
	(3, 'Elvis Presley Da Silva', '(11) 9.9999-3333'),
	(4, 'Faraó do Egito Sousa', '(12) 9.9999-4444'),
	(5, 'Finada da Cruz', '(12) 9.9999-5555'),
	(6, 'Jean Claude Van Dame Da Silva', '(12) 9.9999-6666'),
	(7, 'José Catarrinho', '(51) 9.9999-7777'),
	(8, 'Maiquel Edy Marfy', '(51) 9.9999-8888'),
	(9, 'Salvador Das Dores', '(51) 9.9999-9999')


------------------------------------------
-- 3 formas de exportar para CSV
------------------------------------------
-- Save as "CSV"
select * from amigos


-- Requisitos: 
-- "Ativar SQLCMD Mode em Query -> SQLCMD mode" ou "Executar via xp_cmdshell"
-- As opções dos comandos são case sensitive

-- SQLCMD:
-- -S . = Servidor | -d curso = banco de dados | -E = Trusted Connection | -Q = query a ser executada | -o = Arquivo para salvar resultados | -W remove espaços em branco | -s"," = delimitar com , | -h-1 = remover a primeira linha de cabeçalho
!!sqlcmd -S . -d curso -E -Q "set nocount on; select * from amigos" -o "c:\tmp\amigos.csv" -W -s"," -h-1

-- BCP:
-- -c = tipo de informação texto | -t = termino de campo "," | -T = Trusted connection | -S = Servidor | -C ACP = Windows 1252 charset
!!bcp "select * from curso.dbo.amigos" queryout c:\tmp\amigos.csv -c -t, -T -S -C ACP



------------------------------------------
-- Importando um CSV para o SQL
------------------------------------------
-- Deletar a tabela para não duplicar dados após a importação
delete amigos

-- Importar dados
bulk insert amigos from 'C:\tmp\amigos.csv' with (fieldterminator = ',', rowterminator = '\n', firstrow = 1, codepage = 'acp')

select * from amigos

CONCLUSÃO

Embora estejamos atendidos tanto para exportar quanto para importar, sempre que falo nesse assunto não posso deixar de pensar o quanto o método importação é mais legal do que os métodos de exportação.

Já que estamos próximos ao Natal, poderíamos pedir em conjunto para a Microsoft criar um método de exportação que seja tão legal? Me ajuda ai…. 🙂

Espero que você tenha gostado e continue firme e forte com seus estudos!
Abraço do seu amigo Josué

 

6 respostas

  1. como gerar sem as colunas “—–;”que ficam logo a baixo dos títulos das colunas?

    ex:chave;nome;cpf;livre1;livre2;
    ——-;–;—————;———–;——;——
    112717;LETICIA ANDRADE LIMA MACIEL;057.915.033-00;valorcapital Vencido =R$ 97.33

    1. Bom dia! Na exportação do SQL para texto delimitado, a ideia é que o resultado não apareça em grid mesmo. Quando abrir no Excel, algumas versões separarão automaticamente os dados em colunas e outras não. Caso os dados apareçam todos em uma coluna só no excel, é possível separa-los manualmente no menu “dados” opção “trexto para colunas”. Abraço, Josué

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *