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…
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.
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é
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
Olá, há duas alternativas para isso no vídeo. Abraço, Josué
na exportação os dados não saem como tabela, saem tudo em uma única linha
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é
Só faltou dizer como que extrai o numero da coluna junto…
Podes usar a função rownumber() para incluir o número das linhas no Select. Abraço, Josué