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?

user2323240
źródło
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

Hart CO
źródło
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!

mhn
źródło
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

Andrey Morozov
źródło
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.

Simon Baars
źródło
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

jmhobbs
źródło
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.

Josh
źródło
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.

Steven Mays
źródło
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
SteveC
źródło
0

Oto link do automatu online do konwersji plików CSV do instrukcji SQL Insert Into:

CSV-to-SQL

David Whittaker
źródło
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
vaibhav kulkarni
źródło
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();}
Bhargav Konda
źródło
0

Musiałem często tworzyć skrypty SQL, dodawać je do kontroli źródła i wysyłać do DBA. Użyłem tej aplikacji ExcelIntoSQL ze sklepu Windows https://www.microsoft.com/store/apps/9NH0W51XXQRM Tworzy kompletny skrypt z "CREATE TABLE" i INSERTS.

Pomodoro Technique Game
źródło
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 .

何德福
źródło