Gerar script de inserção sql da planilha do Excel


107

Eu tenho uma grande planilha do Excel que quero adicionar ao meu banco de dados.

Posso gerar um script de inserção SQL a partir desta planilha do Excel?


2
Eu criei uma ferramenta simples para obter scripts sql para ambos inserte update aqui mesmo
Pathros

Você também pode usar minha macro VBA para gerar comandos SQL. Mais aqui: stackoverflow.com/questions/1570387/…
Petrik

Respostas:


201

Acho que a importação usando um dos métodos mencionados é ideal se for realmente um arquivo grande, mas você pode usar o Excel para criar instruções de inserção:

="INSERT INTO table_name VALUES('"&A1&"','"&B1&"','"&C1&"')"

No MS SQL você pode usar:

SET NOCOUNT ON

Deixar de mostrar todos os comentários '1 linha afetada'. E se você estiver fazendo muitas linhas e houver erros, coloque um GO entre as instruções de vez em quando


3
Eu estava usando, =CONCATENATE()mas usar o &sinal leva a uma legibilidade muito melhor!
mastazi

1
@mastazi Concordo! Mudei para &quando esbarrei no limite do parâmetro há CONCATENATE()um tempo, isso não é um problema comum agora que o limite é de 255 parâmetros, mas nunca penso em reverter.
Hart CO

1
CONCATENAR () é o caminho a percorrer. Basta clicar no ícone fx na barra de fórmulas para ver o que você inseriu. É muito mais limpo do que apenas usar e assinar. É claro que usar o & sign é legal, mas às vezes quando você tem aspas duplas ou simples, isso fará com que você conte para sempre o que está faltando.
ian0411

1
Não funciona quando há aspas nas células. Verifique minha resposta para uma versão corrigida.
Simon Baars

2
@PreshanPradeepa Você pode usar a mesma sintaxe, o SQL Server não se importa se o inteiro está entre aspas, desde que seja um inteiro válido.
Hart CO

29

Existe uma ferramenta útil que economiza muito tempo no

http://tools.perceptus.ca/text-wiz.php?ops=7

Você só precisa inserir o nome da tabela, os nomes dos campos e os dados separados por tabulação e clicar em Go!


7
Não publique seus dados confidenciais na web. Você não tem como saber o que acontece com os dados que envia ao aplicativo da web. Algumas dessas ferramentas armazenam seus dados e os disponibilizam publicamente
GabiM

28

Você pode criar uma tabela apropriada através da interface do Management Studio e inserir dados na tabela como mostrado abaixo. Pode levar algum tempo dependendo da quantidade de dados, mas é muito útil.

insira a descrição da imagem aqui

insira a descrição da imagem aqui


Prático. Vejo que com uma coluna IDENTITY, o buffer de cópia precisa ter a coluna, mesmo que os dados nele sejam ignorados, pois os valores são gerados automaticamente conforme as linhas são inseridas.
fortboise

Você pode tornar sua coluna IDENTIDADE a última na lista de colunas e então não seria necessário ter uma coluna extra.
Andrey Morozov

1
se você não especificar os valores de IDENTIDADE na planilha do Excel; você pode alterar e executar novamente o script sql edit top 200 rows removendo a coluna IDENTITY. Então, quando você copia e cola os valores sem IDENTITY; este método funcionará.
aozan88 de

Isso é quebrado para campos de datas e horas no Excel para qualquer outra pessoa que tenha o problema. Os dados datetime são convertidos em dados "binários" no lado SQL por algum motivo.
Kevin Vasko

1
@condiosluzverde Aconselho você a postar sua própria resposta. No caso de editar esta resposta, suas alterações provavelmente serão rejeitadas pelos moderadores da comunidade.
Andrey Morozov

16

Você pode usar a seguinte instrução do Excel:

="INSERT INTO table_name(`"&$A$1&"`,`"&$B$1&"`,`"&$C$1&"`, `"&$D$1&"`) VALUES('"&SUBSTITUTE(A2, "'", "\'")&"','"&SUBSTITUTE(B2, "'", "\'")&"','"&SUBSTITUTE(C2, "'", "\'")&"', "&D2&");"

Isso é melhor do que a resposta de Hart CO, pois leva em consideração os nomes das colunas e elimina os erros de compilação devido às aspas na coluna. A coluna final é um exemplo de coluna de valor numérico, sem aspas.


1
Bom trabalho. No GoogleSheets, tive que remover `(grave / crase) em torno das referências do nome da coluna.
secretwep de

5

Dependendo do banco de dados, você pode exportar para CSV e usar um método de importação.

MySQL - http://dev.mysql.com/doc/refman/5.1/en/load-data.html

PostgreSQL - http://www.postgresql.org/docs/8.2/static/sql-copy.html


3
MS SQL, você pode usar o assistente de importação do SSMS para importar um arquivo do Excel.
Hart CO

1
Para adicionar detalhes ao @HartCO - para navegar até SSMS Import Wizard, clique com o botão direito do mouse no banco de dados, passe o mouse sobre as tarefas, clique em "Import Data ..." próximo à parte inferior do menu de contexto. Siga as etapas do assistente.
qxotk

2

Você poderia usar o VB para escrever algo que resultará em um arquivo linha por linha, adicionando as instruções sql apropriadas em torno de seus dados. Eu já fiz isso antes.


1

Aqui está outra ferramenta que funciona muito bem ...

http://www.convertcsv.com/csv-to-sql.htm

Ele pode usar valores separados por tabulação e gerar um script INSERT. Basta copiar e colar e nas opções da etapa 2 marcar a caixa "A primeira linha são os nomes das colunas"

Em seguida, role para baixo e, na etapa 3, insira o nome da tabela na caixa "Schema.Table or View Name:"

Preste atenção às caixas de seleção excluir e criar tabela também e certifique-se de examinar o script gerado antes de executá-lo.

Esta é a maneira mais rápida e confiável que encontrei.


1

Use o ConvertFrom-ExcelToSQLInsertdo ImportExcel na Galeria do PowerShell

NAME
    ConvertFrom-ExcelToSQLInsert
SYNTAX
    ConvertFrom-ExcelToSQLInsert [-TableName] <Object> [-Path] <Object> 
      [[-WorkSheetname] <Object>] [[-HeaderRow] <int>] 
      [[-Header] <string[]>] [-NoHeader] [-DataOnly]  [<CommonParameters>]
PARAMETERS
    -DataOnly
    -Header <string[]>
    -HeaderRow <int>
    -NoHeader
    -Path <Object>
    -TableName <Object>
    -WorkSheetname <Object>
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
ALIASES
    None
REMARKS
    None


0

Esta consulta que gerei para inserir os dados do arquivo Excel no banco de dados. Neste id e preço estão os valores numéricos e o campo de data também. Esta consulta resumiu todos os tipos de que necessito. Pode ser útil para você também

="insert into  product (product_id,name,date,price) values("&A1&",'" &B1& "','" &C1& "'," &D1& ");"


    Id    Name           Date           price 
    7   Product 7   2017-01-05 15:28:37 200
    8   Product 8   2017-01-05 15:28:37 40
    9   Product 9   2017-01-05 15:32:31 500
    10  Product 10  2017-01-05 15:32:31 30
    11  Product 11  2017-01-05 15:32:31 99
    12  Product 12  2017-01-05 15:32:31 25

0

Você pode usar o método C # abaixo para gerar os scripts de inserção usando a planilha do Excel, apenas você precisa importar o pacote OfficeOpenXml do Gerenciador de pacotes NuGet antes de executar o método.

public string GenerateSQLInsertScripts() {

        var outputQuery = new StringBuilder();
        var tableName = "Your Table Name";
        if (file != null)
        {
            var filePath = @"D:\FileName.xsls";

            using (OfficeOpenXml.ExcelPackage xlPackage = new OfficeOpenXml.ExcelPackage(new FileInfo(filePath)))
            {
                var myWorksheet = xlPackage.Workbook.Worksheets.First(); //select the first sheet here
                var totalRows = myWorksheet.Dimension.End.Row;
                var totalColumns = myWorksheet.Dimension.End.Column;

                var columns = new StringBuilder(); //this is your columns

                var columnRows = myWorksheet.Cells[1, 1, 1, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                columns.Append("INSERT INTO["+ tableName +"] (");
                foreach (var colrow in columnRows)
                {
                    columns.Append("[");
                    columns.Append(colrow);
                    columns.Append("]");
                    columns.Append(",");
                }
                columns.Length--;
                columns.Append(") VALUES (");
                for (int rowNum = 2; rowNum <= totalRows; rowNum++) //selet starting row here
                {
                    var dataRows = myWorksheet.Cells[rowNum, 1, rowNum, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                    var finalQuery = new StringBuilder(); 
                    finalQuery.Append(columns);

                    foreach (var dataRow in dataRows)
                    {
                        finalQuery.Append("'");
                        finalQuery.Append(dataRow);
                        finalQuery.Append("'");
                        finalQuery.Append(",");
                    }
                    finalQuery.Length--;

                    finalQuery.Append(");");

                    outputQuery.Append(finalQuery);

                  }

            }
        }

return outputQuery.ToString();}


0

Tenho uma maneira confiável de gerar inserções SQL de maneira confiável, e você pode modificar parâmetros parciais no processamento. Ajuda muito no meu trabalho, por exemplo, copiar dados de uma centena para banco de dados com estrutura e contagem de campos incompatíveis. IntellIJ DataGrip , a ferramenta poderosa que utilizo. DG pode facilmente receber dados do escritório WPS ou MS Excel por coluna ou linha. após a cópia, o DG pode exportar dados como inserções SQL .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.