Generieren Sie ein SQL-Einfügeskript aus einem Excel-Arbeitsblatt


107

Ich habe ein großes Excel-Arbeitsblatt, das ich meiner Datenbank hinzufügen möchte.

Kann ich aus diesem Excel-Arbeitsblatt ein SQL-Einfügeskript generieren?


2
Ich habe ein einfaches Tool SQL - Skripte für beide zu bekommen insertund update hier
Pathros

Sie können auch mein VBA-Makro verwenden, um SQL-Befehle zu generieren. Mehr hier: stackoverflow.com/questions/1570387/…
Petrik

Antworten:


201

Ich denke, das Importieren mit einer der genannten Methoden ist ideal, wenn es sich wirklich um eine große Datei handelt, aber Sie können Excel verwenden, um Einfügeanweisungen zu erstellen:

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

In MS SQL können Sie Folgendes verwenden:

SET NOCOUNT ON

Um darauf zu verzichten, alle Kommentare "1 Zeile betroffen" anzuzeigen. Und wenn Sie viele Zeilen ausführen und Fehler auftreten, setzen Sie ab und zu ein GO zwischen Anweisungen


3
Ich habe verwendet, =CONCATENATE()aber die Verwendung des &Schilds führt zu einer viel besseren Lesbarkeit!
Mastazi

1
@mastazi Einverstanden! Ich bin zu gewechselt, &als ich vor einiger Zeit auf das Parameterlimit gestoßen bin. Das CONCATENATE()ist kein allgemeines Problem, da das Limit jetzt 255 Parameter beträgt, aber ich denke nie daran, es zurückzusetzen.
Hart CO

1
CONCATENATE () ist der richtige Weg. Klicken Sie einfach auf das FX-Symbol in der Formelleiste, um zu sehen, was Sie eingegeben haben. Es ist viel sauberer als nur verwenden & unterschreiben. Natürlich ist es cool, & sign zu verwenden, aber manchmal, wenn Sie doppelte oder einfache Anführungszeichen haben, werden Sie für immer zählen, was fehlt.
ian0411

1
Funktioniert nicht, wenn Anführungszeichen in Zellen stehen. Überprüfen Sie meine Antwort auf eine korrigierte Version.
Simon Baars

2
@PreshanPradeepa Sie können dieselbe Syntax verwenden. SQL Server ist es egal, ob die Ganzzahl in Anführungszeichen steht, solange es sich um eine gültige Ganzzahl handelt.
Hart CO

29

Es gibt ein praktisches Tool, das viel Zeit spart

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

Sie müssen nur den Tabellennamen, die Feldnamen und die Registerkarte "Daten" getrennt eingeben und auf "Los!"


7
Veröffentlichen Sie Ihre sensiblen Daten nicht im Internet. Sie können nicht wissen, was mit den Daten geschieht, die Sie an die Webanwendung senden. Einige dieser Tools speichern Ihre Daten und machen sie öffentlich verfügbar
GabiM

28

Sie können eine entsprechende Tabelle über die Management Studio-Oberfläche erstellen und Daten wie unten gezeigt in die Tabelle einfügen. Je nach Datenmenge kann es einige Zeit dauern, aber es ist sehr praktisch.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


Praktisch. Ich sehe, dass bei einer IDENTITY-Spalte der Kopierpuffer die Spalte haben muss, obwohl die darin enthaltenen Daten ignoriert werden, wenn die Werte beim Einfügen der Zeilen automatisch generiert werden.
Fortboise

Sie können Ihre IDENTITY-Spalte zur letzten in der Spaltenliste machen, und dann wäre es überhaupt nicht erforderlich, eine zusätzliche Spalte zu haben.
Andrey Morozov

1
wenn Sie die IDENTITY-Werte nicht in der Excel-Tabelle angeben; Sie können das SQL-Skript für die Bearbeitung der obersten 200 Zeilen ändern und erneut ausführen, indem Sie die Spalte IDENTITY entfernen. Wenn Sie also die Werte ohne IDENTITÄT kopieren und einfügen; Diese Methode wird funktionieren.
Aozan88

Dies ist für Datums- und Zeitfelder in Excel für alle anderen Personen, die auf das Problem stoßen, fehlerhaft. Die datetime-Daten werden aus irgendeinem Grund auf der SQL-Seite in "binäre" Daten konvertiert.
Kevin Vasko

1
@condiosluzverde Ich würde Ihnen raten, Ihre eigene Antwort zu posten. Wenn Sie diese Antwort bearbeiten, werden Ihre Änderungen wahrscheinlich von Community-Moderatoren abgelehnt.
Andrey Morozov

15

Sie können die folgende Excel-Anweisung verwenden:

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

Dies ist besser als die Antwort von Hart CO, da Spaltennamen berücksichtigt werden und Kompilierungsfehler aufgrund von Anführungszeichen in der Spalte beseitigt werden. Die letzte Spalte ist ein Beispiel für eine numerische Wertespalte ohne Anführungszeichen.


1
Gute Arbeit. In GoogleSheets musste ich `(Grab / Backtick) entfernen, das die Spaltennamenreferenzen umgibt.
secretwep

5

Abhängig von der Datenbank können Sie in CSV exportieren und dann eine Importmethode verwenden.

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
In MS SQL können Sie den Importassistenten von SSMS verwenden, um eine Excel-Datei zu importieren.
Hart CO

1
So fügen Sie Details zu @HartCO hinzu: Um zum SSMS-Importassistenten zu navigieren, klicken Sie mit der rechten Maustaste auf die Datenbank, bewegen Sie den Mauszeiger über die Aufgaben und klicken Sie unten im Kontextmenü auf "Daten importieren ...". Befolgen Sie die Schritte im Assistenten.
Qxotk

2

Sie können VB verwenden, um etwas zu schreiben, das zeilenweise in eine Datei ausgegeben wird, indem Sie die entsprechenden SQL-Anweisungen um Ihre Daten hinzufügen. Ich habe das schon mal gemacht.


1

Hier ist ein weiteres Tool, das sehr gut funktioniert ...

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

Es kann tabulatorgetrennte Werte annehmen und ein INSERT-Skript generieren. Einfach kopieren und einfügen und in den Optionen unter Schritt 2 das Kontrollkästchen "Erste Zeile sind Spaltennamen" aktivieren.

Scrollen Sie dann nach unten und geben Sie unter Schritt 3 Ihren Tabellennamen in das Feld "Schema.Tabelle oder Ansichtsname:" ein.

Beachten Sie auch die Kontrollkästchen zum Löschen und Erstellen von Tabellen und überprüfen Sie das generierte Skript, bevor Sie es ausführen.

Dies ist der schnellste und zuverlässigste Weg, den ich gefunden habe.


1

Verwenden Sie das ConvertFrom-ExcelToSQLInsertaus dem ImportExcel in der PowerShell-Galerie

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

Diese Abfrage habe ich zum Einfügen der Excel-Dateidaten in die Datenbank generiert. In dieser ID und diesem Preis sind auch numerische Werte und Datumsfelder enthalten. Diese Abfrage hat alle Arten zusammengefasst, die ich benötige. Sie kann auch für Sie nützlich sein

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

Sie können die folgende C # -Methode verwenden, um die Einfügeskripte mithilfe einer Excel-Tabelle zu generieren. Sie müssen lediglich das OfficeOpenXml-Paket aus NuGet Package Manager importieren, bevor Sie die Methode ausführen.

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

Ich habe eine zuverlässige Möglichkeit, SQL-Einfügungen schnell zu generieren, und Sie können Teilparameter bei der Verarbeitung ändern. Dies hilft mir bei meiner Arbeit sehr, z. B. das Kopieren von hundert Daten in eine Datenbank mit inkompatibler Struktur und Feldanzahl. IntellIJ DataGrip , das leistungsstarke Tool, das ich verwende. DG kann Daten von WPS Office oder MS Excel nach Spalten oder Zeilen empfangen. Nach dem Kopieren kann DG Daten als SQL-Einfügungen exportieren .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.