Karuta’s ASP & M$ SQLserver

Dicas, códigos e outras coisinhas de meus estudos para não esquecer…

Importando arquivos .csv no SQL Server através do comando BULK INSERT

Posted by karuta em novembro 5, 2015

O uso de arquivos .csv para a integração entre diferentes sistemas representa uma prática bastante comum no ambiente corporativo, sendo que o próprio pacote Office (por meio do Excel) oferece suporte a este formato. O padrão CSV (sigla do inglês “Comma-separated values”) é empregado costumeiramente na representação de dados em um formato tabular. Arquivos deste tipo possuem a extensão .csv e, basicamente, nada mais são do que sequências de texto separadas por um símbolo especial (geralmente caracteres como vírgula ou ponto-e-vírgula são utilizados em tais representações).

No caso específico do SQL Server, é importante destacar que este SGBD também suporta a manipulação de arquivos no formato .csv. O comando BULK INSERT corresponde a um dos meios que possibilitam a compatibilidade com este padrão, fazendo uso para isto de uma técnica conhecida como “Bulk Copy”. Um dos benefícios de operações do tipo Bulk Copy é viabilizar a transferência, de um modo simplificado, de grandes volumes de informações para uma base relacional.

Sendo parte integrante da extensão Transact-SQL desde a versão 2008 do SQL Server, o comando BULK INSERT permite o carregamento de informações contidas em arquivos de texto para tabelas e views em bancos de dados. O objetivo deste post é demonstrar como a instrução BULK INSERT pode ser utilizada na importação de arquivos .csv, com isto acontecendo através de um exemplo envolvendo a carga de preços de produtos.

Exemplo de utilização do comando BULK INSERT

O exemplo abordado neste artigo fará uso de uma tabela chamada “TMP_Produtos”, a partir de uma base de dados gerada num servidor SQL Server 2014. NaListagem 1 está o script a ser utilizado para a criação desta estrutura.

A tabela TMP_Produtos será preenchida tomando por base um arquivo .csv (Produtos.csv), sendo que neste último constará uma lista de preços com produtos comercializados por uma companhia hipotética. Em um cenário real, essa estrutura poderia ser o ponto de partida para que um processo atualizasse um cadastro com informações consolidadas de produtos.

1
2
3
4
5
6
7
CREATE TABLE [dbo].[TMP_Produtos](
    [CodigoBarras] [char](13) NOT NULL,
    [NomeProduto] [varchar](50) NOT NULL,
    [Categoria] [varchar](20) NOT NULL,
    [PrecoVenda] [decimal](12,2) NOT NULL
)
GO

Listagem 1: Script para criação da tabela TMP_Produtos

Já na Listagem 2 está o conteúdo do arquivo .csv (Produtos.csv) que será importado, por meio do comando BULK INSERT, para a tabela TMP_Produtos. Este arquivo conta com diferentes colunas separadas por ponto-e-vírgula (“;”), sendo formado pelos seguintes campos:

  • Código de Barras;
  • Nome/Descrição do Produto;
  • Categoria do Produto;
  • Preço Unitário.
1
2
3
4
5
6
7
8
7890000000111;Iron Maiden - Powerslave;CDs;44.90
7890000000222;Metallica - Black Album;CDs;46.95
7890000000333;Invictus;DVDs;16.90
7890000000444;Uma Mente Brilhante;DVDs;32.75
7890000000555;Trilogia Senhor dos Anéis;Blu-Ray;129.90
7890000000660;Box Star Wars - 6 episódios;Blu-Ray;299.90
7890000000777;A Arte da Guerra;Livros;10.00
7890000000888;Transformando Suor em Ouro;Livros;24.90

Listagem 2: Arquivo Produtos.csv

O exemplo aqui abordado parte do pressuposto de que o arquivo Produtos.csv esteja localizado em um diretório chamado C:\Desenvolvimento\TesteBulkInsert. Para que seja possível a carga das informações, o comando BULK INSERT deverá ser utilizado conforme indicado na Listagem 3:

  • A instrução TRUNCATE irá inicializar a tabela TMP_Produtos, antes de se proceder com a carga de dados para tal estrutura.
  • No comando BULK INSERT é indicada inicialmente a tabela em que os dados deverão ser carregados (TMP_Produtos, neste caso);
  • A cláusula FROM do bloco formado pelo comando BULK INSERT especifica o caminho do arquivo .csv a ser importado;
  • Já na cláusula WITH são indicados diferentes parâmetros, com o objetivo de definir aspectos tais como características do arquivo, assim como outros comportamentos a serem considerados pelo comando BULK INSERT durante o processo de carga. Levando em consideração o exemplo apresentado, é possível notar o uso dos parâmetros FIELDTERMINATOR (determina o caracter utilizado na separação dos valores que representam as colunas de um arquivo .csv) e ROWTERMINATOR (especifica o caracter empregado na quebra de linhas em um arquivo .csv). Uma relação completa dos argumentos suportados pela cláusula WITH está disponível no link ao final deste post.

O resultado da execução das instruções que constam na Listagem 3 é apresentado na Imagem 1.

1
2
3
4
5
6
7
8
9
10
11
TRUNCATE TABLE dbo.TMP_Produtos
GO
BULK INSERT dbo.TMP_Produtos
FROM 'C:\Desenvolvimento\TesteBulkInsert\Produtos.csv'
WITH
(
     FIELDTERMINATOR = ';',
     ROWTERMINATOR = '\n'
)
GO

Listagem 3: Utilizando a instrução BULK INSERT

Imagem001
Imagem 1. Resultado da execução da instrução BULK INSERT

Uma simples consulta à tabela TMP_Produtos produzirá um resultado similar àquele descrito na Imagem 2.

Imagem002
Imagem 2. Tabela TMP_Produtos preenchida após carga de arquivo .csv

Encerro com isto mais um artigo a respeito de comandos T-SQL no SQL Server. Procurei demonstrar neste novo post como a instrução BULK INSERT pode ser extremamente útil na importação do conteúdo de arquivos .csv.

Espero que este conteúdo possa auxiliá-lo no seu dia-a-dia.

Até uma próxima oportunidade!

Links

BULK INSERT (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188365.aspx

 

Créditos:

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: