Importação de arquivos CSV
Neste post quero apresentar o recurso de importação de arquivos CSV para o banco de dados do SQL Server. A ideia aqui não é demonstrar o recurso de Importação e Exportação do SQL Server (que é muito intuitivo utilizar), mas demonstrar como fazer isso via script, utilizando código Transact-SQL (T-SQL).
Arquivos CSV é um padrão bem útil e antigo, utilizado para fornecer dados em formato flat, sem criptografia ou qualquer codificação de dados. Isto significa que você pode abri-lo no bloco de notas que vai conseguir ler os dados.
O próprio Excel abre o formato CSV sem convertê-lo para o formato atual XLSX. Com uma pequena formatação disponível no Excel é possível visualizar os dados em linhas x colunas na disposição de planilha e salvá-lo como tipo XLSX para usar os recursos do Excel.
Em alguns casos, especialmente com uso de um ERP, há a necessidade de importar este dados para o SQL Server em forma de uma nova tabela. Este formato pode ser utilizado para transferência de dados de uma base para outra, em geral, governados por diferentes ERPs.
De maneira bem simplificada, suponha que você tenha um cadastro de produtos em formato CSV (Import_Produtos.csv) com a seguinte formatação:
O primeiro passo é criar um arquivo com extensão .FMT (Import_Produtos.fmt) contendo a seguinte formatação:
8
1 SQLCHAR 0 6 ";" 1 Produto ""
2 SQLCHAR 0 50 ";" 2 Desc_Produto SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 5 ";" 3 Cor ""
4 SQLCHAR 0 30 ";" 4 Desc_Cor SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 50 ";" 6 Composicao_1 SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 10 ";" 5 Porcet_1 SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 50 ";" 8 Composicao_2 SQL_Latin1_General_CP1_CI_AS
8 SQLCHAR 0 10 "\r\n" 7 Porcet_2 SQL_Latin1_General_CP1_CI_AS
Finalmente, para importar os dados pelo Management Studio do SQL Server, desenvolva o seguinte código especificando o nome da pasta e do arquivo a ser importado:
SELECT *
FROM OPENROWSET(BULK 'C:\Repositorio\ViaTransactSQL\Import_Produtos.CSV',
FORMATFILE = 'C:\Repositorio\ViaTransactSQL\Import_Produtos.FMT',
-- 2) Criação da tabela Swd_Import_CSV com os dados do BULK INSERT
SELECT *
INTO Swd_Import_CSV
FROM OPENROWSET(BULK 'C:\Repositorio\ViaTransactSQL\Import_Produtos.CSV',
FORMATFILE = 'C:\Repositorio\ViaTransactSQL\Import_Produtos.FMT',
-- 3) Visualização da Swd_Import_CSV
SELECT * FROM Swd_Import_CSV
O primeiro select trará apenas a visualização do arquivo CSV pelo SGBD. O segundo fará a inserção dos dados do arquivo em uma tabela Swd_Import_CSV, já criando os campos conforme a formatação informada. O terceiro visualiza a tabela criada.
Observações:
A partir do SQL Server 2017 deve-se especificar o formato que está importando (FORMAT = 'CSV'), pois o SQL permite importar outros formatos como o PARQUET. Aqui utilizei o SQL Server 2014 e o uso da cláusula FORMAT causa erro de sintaxe.
Apesar do limite de tipos de dados, você pode criar campos float (SQLFLT8) ou binários (SQLBINARY), mas a visualização destes dados não será nada intuitiva. Meu conselho é que trabalhe tudo com o tipo SQLCHAR e após importar, use o CAST para gerar uma nova tabela com o tipo adequado (talvez você tenha que usar um REPLACE nos campos decimais para substituir a vírgula por um ponto e ficar no formato de casas decimais corretas na importação)
Referência:
https://learn.microsoft.com/pt-br/sql/t-sql/functions/openrowset-transact-sql?view=sql-server-ver16


Comentários
Postar um comentário