5
respostas

Inserir vários dados de uma planilha de excel em uma tabela

Olá para todos.

Estou atuando na área de Banco de Dados na empresa aonde trabalho, mas não tenho conhecimentos tão aprofundados com relação a inserts. Meu problema é o seguinte: Preciso inserir por volta de 2600 linhas que estão em uma tabela de excel em uma tabela do BD aonde trabalho. Como é possível fazer isso sem ter que inserir uma por uma ou criar um insert gigante escrevendo cada linha?

Desde já, agradeço.

5 respostas

Oi Anderson tudo bem?

Você pode salvar a planilha em formato CSV e inserir ela no banco de dados usando o BULK INSERT. Dá uma olhada na documentação da Microsoft https://docs.microsoft.com/pt-br/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017

Espero ter ajudado!!!

Agradeço pela sua resposta André.

Para que o bulk insert funcione, é necessário que o CSV esteja dentro do servidor aonde está o BD?

Eu já tentei usar esse recurso, mas sempre diz que o arquivo não pode ser encontrado. E, ao pesquisar sobre o erro, vi essa informação que mencionei no primeiro parágrafo.

E, pra finalizar, além do bulk insert, existe outras maneiras de fazer esse insert?

Obrigado.

Oi Anderson, sim o endereço é a partir do servidor pois ele que vai acessar. Então o servidor tem que acessar uma pasta compartilhada na rede onde ele tem permissão de leitura \Servername\Sharename\Path\Filename .

Além do BULK INSERT tem o OPENROWSET : https://docs.microsoft.com/pt-br/sql/relational-databases/import-export/import-bulk-data-by-using-bulk-insert-or-openrowset-bulk-sql-server?view=sql-server-2017 .

Mas no trabalho uso VBA para ler o conteúdo do Excel e importar para o banco de dados linha a linha (crio uma barra de porcentagem para não deixar o usuário ansioso). Ou então com uso de formulas do excel (=concatenar) crio vários inserts abro uma nova instância do sql server e executo em uma query. Duas mil linhas para um banco de dados não é nada. Ele não perde perfomance enquanto executa a ação e em meu servidor (ele é compartilhado então não sei seu verdadeiro potencial) ele dá insert em média de 10 linhas por segundo então 2000 linhas dá uns 3 minutos em média.

Obrigado André pela sua explicação.

Se for possível, você pode exemplificar o que você faz no seu trabalho?? Gostei das suas sugestões e gostaria de saber como aplicá-las.

Desde já, agradeço.

Um exemplo de algo que até ontem fazia em VBA mas passei para C#.

Eu pegava um arquivo CSV liberado por outro departamento que continha os dados da produção do dia anterior.

Carregava ele no Excel, e linha a linha ia dando insert para o banco de dados (SQL Server).

Depois pegava esses dados do banco de dados e criava páginas Web com relatórios de como foi a produção.