Wygeneruj skrypt wstawiania sql z arkusza programu Excel


107

Mam duży arkusz programu Excel, który chcę dodać do mojej bazy danych.

Czy mogę wygenerować skrypt wstawiania SQL z tego arkusza programu Excel?


2
Stworzyłem proste narzędzie do pobierania skryptów sql dla obu inserti update tutaj
Pathros

Możesz także użyć mojego makra VBA do generowania poleceń SQL. Więcej tutaj: stackoverflow.com/questions/1570387/…
Petrik

Odpowiedzi:


202

Myślę, że importowanie przy użyciu jednej z wymienionych metod jest idealne, jeśli naprawdę jest to duży plik, ale możesz użyć programu Excel do tworzenia instrukcji wstawiania:

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

W MS SQL możesz użyć:

SET NOCOUNT ON

Zrezygnować z wyświetlania wszystkich komentarzy z „1 wierszem, na które ma to wpływ” A jeśli robisz wiele wierszy i pojawia się błąd, od czasu do czasu wstaw GO między instrukcjami


3
Używałem, =CONCATENATE()ale używanie &znaku prowadzi do znacznie lepszej czytelności!
mastazi

1
@mastazi Agreed! Przerzuciłem się na, &gdy wpadłem na limit parametrów CONCATENATE()jakiś czas temu, to nie jest powszechny problem teraz, gdy limit wynosi 255 parametrów, ale nigdy nie myślę o przywróceniu.
Hart CO

1
CONCATENATE () to droga do zrobienia. Wystarczy kliknąć ikonę fx na pasku formuły, aby zobaczyć, co wprowadziłeś. Jest znacznie czystszy niż zwykłe używanie i podpisywanie. Oczywiście używanie znaku & jest fajne, ale czasami, gdy masz podwójne cudzysłowy lub pojedynczy cudzysłów, będziesz liczyć na zawsze, czego brakuje.
ian0411

1
Nie działa, gdy w komórkach znajdują się cudzysłowy. Sprawdź moją odpowiedź na poprawioną wersję.
Simon Baars,

2
@PreshanPradeepa Możesz użyć tej samej składni, SQL Server nie dba o to, czy liczba całkowita jest w cudzysłowie, o ile jest to poprawna liczba całkowita.
Hart CO

29

Jest poręczne narzędzie, które oszczędza dużo czasu w

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

Wystarczy podać nazwę tabeli, nazwy pól i dane - oddzielone tabulatorami i nacisnąć Go!


7
Nie publikuj swoich poufnych danych w Internecie. Nie masz możliwości dowiedzenia się, co dzieje się z danymi, które przesyłasz do aplikacji internetowej. Niektóre z tych narzędzi przechowują Twoje dane i udostępniają je publicznie
GabiM,

28

Możesz utworzyć odpowiednią tabelę za pośrednictwem interfejsu studia zarządzania i wstawić dane do tabeli, tak jak pokazano poniżej. Może to zająć trochę czasu w zależności od ilości danych, ale jest bardzo przydatne.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj


Poręczny. Widzę, że w przypadku kolumny IDENTITY bufor kopiowania musi mieć kolumnę, mimo że dane w niej będą ignorowane, ponieważ wartości są generowane automatycznie podczas wstawiania wierszy.
fortboise

Możesz ustawić swoją kolumnę IDENTITY jako ostatnią na liście kolumn, a wtedy nie będzie konieczne posiadanie dodatkowej kolumny.
Andrey Morozov

1
jeśli nie określisz wartości TOŻSAMOŚCI w arkuszu programu Excel; można zmienić i ponownie uruchomić skrypt sql edycji 200 pierwszych wierszy, usuwając kolumnę IDENTITY. Więc kiedy kopiujesz i wklejasz wartości bez TOŻSAMOŚCI; ta metoda zadziała.
aozan88

Jest to zepsute dla pól dat i godzin w programie Excel dla każdego, kto napotka problem. Z jakiegoś powodu dane typu data-godzina są konwertowane na dane „binarne” po stronie SQL.
Kevin Vasko

1
@condiosluzverde Radziłbym zamieścić własną odpowiedź. W przypadku edycji tej odpowiedzi Twoje zmiany prawdopodobnie zostaną odrzucone przez moderatorów społeczności.
Andrey Morozov

16

Możesz użyć następującej instrukcji programu Excel:

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

Poprawia to odpowiedź Harta CO, ponieważ bierze pod uwagę nazwy kolumn i usuwa błędy kompilacji spowodowane cudzysłowami w kolumnie. Ostatnia kolumna jest przykładem kolumny z wartościami liczbowymi, bez cudzysłowów.


1
Dobra robota. W GoogleSheets musiałem usunąć `(grave / backtick) otaczające odniesienia do nazw kolumn.
Secretwep,

5

W zależności od bazy danych możesz wyeksportować do CSV, a następnie skorzystać z metody importu.

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, możesz użyć kreatora importu SSMS, aby zaimportować plik Excel.
Hart CO

1
Aby dodać szczegóły do ​​@HartCO - Aby przejść do Kreatora importu SSMS, kliknij prawym przyciskiem myszy bazę danych, najedź kursorem na zadania, kliknij „Importuj dane ...” u dołu menu kontekstowego. Postępuj zgodnie z instrukcjami kreatora.
qxotk

2

Możesz użyć VB, aby napisać coś, co wyprowadzi do pliku wiersz po wierszu, dodając odpowiednie instrukcje sql wokół danych. Robiłem to już wcześniej.


1

Oto kolejne narzędzie, które działa bardzo dobrze ...

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

Może przyjmować wartości rozdzielone tabulatorami i generować skrypt INSERT. Po prostu skopiuj i wklej i w opcjach pod krokiem 2 zaznacz pole „Pierwszy wiersz to nazwy kolumn”

Następnie przewiń w dół i w kroku 3 wprowadź nazwę tabeli w polu „Schemat.Tabela lub nazwa widoku:”

Zwróć także uwagę na pola wyboru usuń i utwórz tabelę, i upewnij się, że sprawdziłeś wygenerowany skrypt przed jego uruchomieniem.

To najszybszy i najbardziej niezawodny sposób, jaki znalazłem.


1

Użyj ConvertFrom-ExcelToSQLInsertz ImportExcel w galerii programu 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

To zapytanie, które wygenerowałem, aby wstawić dane pliku Excel do bazy danych. W tym identyfikatorze i cenie są również wartości liczbowe i pole daty. To zapytanie podsumowało wszystkie typy, których potrzebuję. Może być przydatne również dla Ciebie

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

Możesz użyć poniższej metody C #, aby wygenerować skrypty wstawiania za pomocą arkusza programu Excel, wystarczy zaimportować pakiet OfficeOpenXml z Menedżera pakietów NuGet przed wykonaniem metody.

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

Mam niezawodny sposób na bezproblemowe generowanie wstawek SQL, a przy przetwarzaniu można modyfikować częściowe parametry, co bardzo mi pomaga w pracy np. Kopiowanie setek danych do bazy danych o niekompatybilnej strukturze i liczbie pól. IntellIJ DataGrip , potężne narzędzie, którego używam. DG może bez problemu otrzymywać dane z biura WPS lub MS Excel według kolumny lub wiersza. po skopiowaniu DG może eksportować dane jako wstawki SQL .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.