Hasilkan skrip sisipan sql dari lembar kerja excel


107

Saya memiliki lembar kerja excel besar yang ingin saya tambahkan ke database saya.

Dapatkah saya membuat skrip penyisipan SQL dari lembar kerja excel ini?


2
Saya membuat alat sederhana untuk mendapatkan skrip sql untuk keduanya insert& update di sini
Pathros

Anda juga dapat menggunakan makro VBA saya untuk menghasilkan perintah SQL. Selengkapnya di sini: stackoverflow.com/questions/1570387/…
Petrik

Jawaban:


202

Saya pikir mengimpor menggunakan salah satu metode yang disebutkan sangat ideal jika itu benar-benar file besar, tetapi Anda dapat menggunakan Excel untuk membuat pernyataan penyisipan:

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

Di MS SQL Anda dapat menggunakan:

SET NOCOUNT ON

Untuk tidak menampilkan semua komentar '1 baris terpengaruh'. Dan jika Anda melakukan banyak baris dan kesalahan terjadi, sesekali tempatkan GO di antara pernyataan


3
Saya menggunakan =CONCATENATE()tetapi menggunakan &tanda itu mengarah pada keterbacaan yang jauh lebih baik!
mastazi

1
@mastazi Setuju! Saya beralih ke &ketika saya menemukan batas parameter CONCATENATE()beberapa waktu lalu, itu bukan masalah umum sekarang karena batasnya adalah 255 parameter, tetapi saya tidak pernah berpikir untuk kembali.
Hart CO

1
CONCATENATE () adalah cara yang harus dilakukan. Cukup klik ikon fx pada bilah rumus untuk melihat apa yang telah Anda masukkan. Ini jauh lebih bersih daripada hanya menggunakan & menandatangani. Tentu saja menggunakan & sign itu keren tetapi kadang-kadang ketika Anda memiliki tanda kutip ganda atau tanda kutip tunggal, itu akan membuat Anda menghitung selamanya dari apa yang hilang.
ian0411

1
Tidak berfungsi saat memiliki tanda kutip di sel. Periksa jawaban saya untuk versi yang dikoreksi.
Simon Baars

2
@PreshanPradeepa Anda dapat menggunakan sintaks yang sama, SQL Server tidak peduli jika bilangan bulat dalam tanda kutip selama itu bilangan bulat yang valid.
Hart CO

29

Ada alat praktis yang menghemat banyak waktu di

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

Anda hanya perlu memberi makan di nama tabel, nama field dan data - tab dipisahkan dan tekan Go!


7
Jangan memposting data sensitif Anda di web. Anda tidak memiliki cara untuk mengetahui apa yang terjadi pada data yang Anda kirimkan ke aplikasi web. Beberapa alat ini menyimpan data Anda dan membuatnya tersedia untuk umum
GabiM

28

Anda dapat membuat tabel yang sesuai melalui antarmuka studio manajemen dan memasukkan data ke dalam tabel seperti yang ditunjukkan di bawah ini. Mungkin perlu beberapa waktu tergantung pada jumlah data, tetapi ini sangat berguna.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


Berguna. Saya melihat bahwa dengan kolom IDENTITAS, buffer salinan harus memiliki kolom tersebut, meskipun data di dalamnya akan diabaikan karena nilainya dibuat secara otomatis saat baris disisipkan.
fortboise

Anda dapat menjadikan kolom IDENTITAS Anda sebagai yang terakhir dalam daftar kolom dan kemudian tidak perlu memiliki kolom tambahan sama sekali.
Andrey Morozov

1
jika Anda tidak menentukan nilai IDENTITAS di lembar excel; Anda dapat mengubah dan menjalankan kembali edit skrip sql 200 baris teratas dengan menghapus kolom IDENTITAS. Jadi, saat Anda menyalin dan menempelkan nilai-nilai tanpa IDENTITAS; metode ini akan berhasil.
aozan88

Ini rusak untuk bidang tanggal dan waktu di Excel untuk orang lain yang mengalami masalah. Data datetime diubah menjadi data "biner" di sisi SQL karena beberapa alasan.
Kevin Vasko

1
@condiosluzverde Saya akan menyarankan Anda untuk memposting jawaban Anda sendiri. Dalam hal mengedit jawaban ini, perubahan Anda mungkin akan ditolak oleh moderator komunitas.
Andrey Morozov

16

Anda dapat menggunakan pernyataan excel berikut:

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

Ini lebih baik daripada jawaban Hart CO karena memperhitungkan nama kolom dan menghilangkan kesalahan kompilasi karena tanda kutip di kolom. Kolom terakhir adalah contoh kolom nilai numerik, tanpa tanda kutip.


1
Kerja bagus. Di GoogleSheets saya harus menghapus `(kuburan / backtick) di sekitar referensi nama kolom.
secretwep

5

Bergantung pada database, Anda dapat mengekspor ke CSV lalu menggunakan metode impor.

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, Anda dapat menggunakan wizard impor SSMS untuk mengimpor File Excel.
Hart CO

1
Untuk menambahkan detail ke @HartCO - Untuk menavigasi ke SSMS Import Wizard, klik kanan pada database, arahkan kursor ke tugas, klik "Impor Data ..." di dekat bagian bawah menu konteks. Ikuti langkah-langkah di wizard.
qxotk

2

Anda dapat menggunakan VB untuk menulis sesuatu yang akan ditampilkan ke baris file dengan menambahkan baris dalam pernyataan sql yang sesuai di sekitar data Anda. Saya pernah melakukan ini sebelumnya.


1

Ini alat lain yang bekerja dengan sangat baik ...

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

Ini dapat mengambil nilai yang dipisahkan tab dan menghasilkan skrip INSERT. Cukup salin dan tempel dan dalam opsi bawah langkah 2 centang kotak "Baris pertama adalah nama kolom"

Kemudian gulir ke bawah dan di bawah langkah 3, masukkan nama tabel Anda di kotak "Schema.Table or View Name:"

Perhatikan juga kotak centang hapus dan buat tabel, dan pastikan Anda memeriksa skrip yang dibuat sebelum menjalankannya.

Ini adalah cara tercepat dan paling andal yang pernah saya temukan.


1

Gunakan ConvertFrom-ExcelToSQLInsertdari ImportExcel di 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

Kueri ini saya buat untuk memasukkan data file Excel ke dalam database. Dalam id dan harga ini adalah nilai numerik dan kolom tanggal juga. Kueri ini merangkum semua jenis yang saya butuhkan. Mungkin berguna juga bagi Anda

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

Anda dapat menggunakan Metode C # di bawah ini untuk menghasilkan skrip penyisipan menggunakan lembar Excel hanya Anda perlu mengimpor Paket OfficeOpenXml dari NuGet Package Manager sebelum menjalankan metode ini.

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

Saya memiliki cara yang dapat diandalkan untuk menghasilkan sisipan SQL, dan Anda dapat memodifikasi parameter parsial dalam pemrosesan. Ini sangat membantu saya dalam pekerjaan saya, misalnya, menyalin satu ratus data ke database dengan struktur yang tidak kompatibel dan jumlah bidang. IntellIJ DataGrip , alat canggih yang saya gunakan. DG dapat dengan mudah menerima data dari kantor WPS atau MS Excel dengan kolom atau baris. setelah menyalin, DG dapat mengekspor data sebagai sisipan SQL .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.