Genera script di inserimento sql dal foglio di lavoro Excel


107

Ho un foglio di lavoro Excel di grandi dimensioni che voglio aggiungere al mio database.

Posso generare uno script di inserimento SQL da questo foglio di lavoro Excel?


2
Ho creato un semplice strumento per ottenere script sql per entrambi inserte update proprio qui
Pathros

Puoi anche usare la mia macro VBA per generare comandi SQL. Maggiori informazioni qui: stackoverflow.com/questions/1570387/…
Petrik

Risposte:


202

Penso che l'importazione utilizzando uno dei metodi menzionati sia l'ideale se si tratta veramente di un file di grandi dimensioni, ma puoi usare Excel per creare istruzioni di inserimento:

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

In MS SQL puoi usare:

SET NOCOUNT ON

Per rinunciare a mostrare tutti i commenti "1 riga interessata". E se stai facendo molte righe e si verificano errori, metti un GO tra le istruzioni ogni tanto


3
Stavo usando =CONCATENATE()ma usando il &segno porta a una leggibilità molto migliore!
mastazi

1
@mastazi d'accordo! Sono passato a &quando mi sono imbattuto nel limite dei parametri CONCATENATE()qualche tempo fa, questo non è un problema comune ora che il limite è di 255 parametri, ma non penso mai di tornare indietro.
Hart CO,

1
CONCATENATE () è la strada da percorrere. Basta fare clic sull'icona fx sulla barra della formula per vedere cosa hai inserito. È molto più pulito del semplice utilizzo e firma. Ovviamente usare & sign è bello, ma a volte quando hai virgolette doppie o virgolette singole, questo ti farà contare per sempre di ciò che manca.
ian0411

1
Non funziona quando si hanno virgolette nelle celle. Controlla la mia risposta per una versione corretta.
Simon Baars

2
@PreshanPradeepa È possibile utilizzare la stessa sintassi, SQL Server non si preoccupa se il numero intero è tra virgolette purché sia ​​un numero intero valido.
Hart CO,

29

C'è uno strumento utile che fa risparmiare molto tempo a

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

Devi solo inserire il nome della tabella, i nomi dei campi e i dati - tab separati e premere Vai!


7
Non pubblicare i tuoi dati sensibili sul web. Non hai modo di sapere cosa succede ai dati che invii all'applicazione web. Alcuni di questi strumenti memorizzano i tuoi dati e li rendono pubblicamente disponibili
GabiM

28

È possibile creare una tabella appropriata tramite l'interfaccia di Management Studio e inserire i dati nella tabella come mostrato di seguito. Potrebbe volerci un po 'di tempo a seconda della quantità di dati, ma è molto utile.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Maneggevole. Vedo che con una colonna IDENTITY, il buffer di copia deve avere la colonna, anche se i dati al suo interno verranno ignorati poiché i valori vengono generati automaticamente quando le righe vengono inserite.
fortboise

Puoi rendere la tua colonna IDENTITY l'ultima nell'elenco delle colonne e quindi non sarebbe necessario avere una colonna extra.
Andrey Morozov

1
se non specifichi i valori di IDENTITÀ nel foglio Excel; è possibile modificare ed eseguire nuovamente lo script sql di modifica delle prime 200 righe rimuovendo la colonna IDENTITY. Quindi, quando copi e incolli i valori senza IDENTITÀ; questo metodo funzionerà.
aozan88

Ciò è interrotto per i campi di data e ora in Excel per chiunque altro si trovi nel problema. I dati datetime vengono convertiti in dati "binari" sul lato SQL per qualche motivo.
Kevin Vasko

1
@condiosluzverde ti consiglierei di postare una tua risposta. In caso di modifica di questa risposta, le modifiche verranno probabilmente rifiutate dai moderatori della community.
Andrey Morozov

16

Puoi utilizzare la seguente dichiarazione excel:

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

Questo è meglio della risposta di Hart CO in quanto tiene conto dei nomi delle colonne e elimina gli errori di compilazione dovuti alle virgolette nella colonna. L'ultima colonna è un esempio di una colonna di valori numerici, senza virgolette.


1
Buon lavoro. In GoogleSheets ho dovuto rimuovere `(grave / backtick) che circonda i riferimenti al nome della colonna.
secretwep

5

A seconda del database, puoi esportare in CSV e quindi utilizzare un metodo di importazione.

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, è possibile utilizzare la procedura guidata di importazione di SSMS per importare un file Excel.
Hart CO

1
Per aggiungere dettagli a @HartCO - Per accedere alla procedura guidata di importazione SSMS, fai clic con il pulsante destro del mouse sul database, passa il mouse sulle attività, fai clic su "Importa dati ..." nella parte inferiore del menu contestuale. Segui i passaggi della procedura guidata.
qxotk

2

È possibile utilizzare VB per scrivere qualcosa che verrà restituito in un file riga per riga aggiungendo le istruzioni sql appropriate attorno ai dati. L'ho già fatto.


1

Ecco un altro strumento che funziona molto bene ...

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

Può accettare valori separati da tabulazione e generare uno script INSERT. Basta copiare e incollare e nelle opzioni passaggio 2 selezionare la casella "La prima riga è nomi di colonne"

Quindi scorri verso il basso e sotto il passaggio 3, inserisci il nome della tabella nella casella "Schema.Table or View Name:"

Presta attenzione anche alle caselle di controllo Elimina e crea tabella e assicurati di esaminare lo script generato prima di eseguirlo.

Questo è il modo più veloce e affidabile che ho trovato.


1

Usa il ConvertFrom-ExcelToSQLInsertda ImportExcel nella PowerShell Gallery

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

Questa query che ho generato per inserire i dati del file Excel nel database In questo id e prezzo sono valori numerici e anche il campo della data. Questa query ha riassunto tutto il tipo di cui ho bisogno. Potrebbe anche essere utile

="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

È possibile utilizzare il seguente metodo C # per generare gli script di inserimento utilizzando il foglio Excel, è sufficiente importare il pacchetto OfficeOpenXml da NuGet Package Manager prima di eseguire il metodo.

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

Ho un modo affidabile per generare inserimenti SQL in modo efficace e puoi modificare parametri parziali durante l'elaborazione.Mi aiuta molto nel mio lavoro, ad esempio, copiare centinaia di dati su database con struttura e conteggio campi incompatibili. IntellIJ DataGrip , il potente strumento che utilizzo. DG può ricevere facilmente i dati dall'ufficio WPS o da MS Excel per colonna o riga. dopo la copia, DG può esportare i dati come inserti SQL .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.