Excel çalışma sayfasından sql insert komut dosyası oluşturun


107

Veritabanıma eklemek istediğim büyük bir excel çalışma sayfam var.

Bu excel çalışma sayfasından bir SQL ekleme komut dosyası oluşturabilir miyim?


2
Hem insert& update tam burada hem de sql betikleri almak için basit bir araç
yarattım

SQL komutları oluşturmak için VBA makromu da kullanabilirsiniz. Daha fazla bilgi burada: stackoverflow.com/questions/1570387/…
Petrik

Yanıtlar:


202

Bahsedilen yöntemlerden birini kullanarak içe aktarmanın gerçekten büyük bir dosyaysa ideal olduğunu düşünüyorum, ancak ekleme ifadeleri oluşturmak için Excel'i kullanabilirsiniz:

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

MS SQL'de şunları kullanabilirsiniz:

SET NOCOUNT ON

Tüm 'etkilenen 1 satır' yorumları göstermekten vazgeçmek. Ve çok sayıda satır yapıyorsanız ve bu hatalar çıkıyorsa, arada bir ifadeler arasına bir GO koyun


3
Kullanıyordum =CONCATENATE()ama &işareti kullanmak çok daha iyi okunabilirlik sağlıyor!
mastazi

1
@mastazi Kabul Edildi! Bir süre önce &parametre sınırına geldiğimde geçiş yaptım CONCATENATE(), bu artık yaygın bir sorun değil, sınır 255 parametre olduğundan, ancak geri dönmeyi asla düşünmüyorum.
Hart CO

1
CONCATENATE () gitmenin yoludur. Ne girdiğinizi görmek için formül çubuğundaki fx simgesine tıklamanız yeterlidir. Sadece kullan ve imzalamaktan çok daha temiz. Elbette & işaretini kullanmak harikadır, ancak bazen çift tırnak ya da tek alıntıya sahip olduğunuzda, bu eksik olanı sonsuza kadar saymanıza neden olur.
ian0411

1
Hücrelerde tırnak işareti varken çalışmıyor. Düzeltilmiş bir versiyon için cevabımı kontrol edin.
Simon Baars

2
@PreshanPradeepa Aynı sözdizimini kullanabilirsiniz, SQL Server, geçerli bir tamsayı olduğu sürece tamsayının tırnak içinde olmasına aldırmaz.
Hart CO

29

Çok fazla zaman kazandıran kullanışlı bir araç var.

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

Sadece tablo adını, alan adlarını ve verileri - sekmeyle ayrılmış olarak beslemeniz ve Git!


7
Hassas verilerinizi web'de yayınlamayın. Web uygulamasına gönderdiğiniz verilere ne olacağını bilmenin hiçbir yolu yok. Bu araçlardan bazıları verilerinizi depolar ve herkese açık hale getirir
GabiM

28

Yönetim stüdyosu arayüzü üzerinden uygun bir tablo oluşturabilir ve aşağıda gösterildiği gibi tabloya veri ekleyebilirsiniz. Veri miktarına bağlı olarak biraz zaman alabilir, ancak çok kullanışlıdır.

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin


Kullanışlı. Bir KİMLİK sütununda, satırlar eklendikçe değerler otomatik olarak oluşturulduğundan, içindeki veriler göz ardı edilecek olsa bile, kopyalama tamponunun sütuna sahip olması gerektiğini görüyorum.
fortboise

KİMLİK sütununuzu sütun listesinin sonuncusu yapabilirsiniz ve bu durumda fazladan bir sütuna sahip olmaya gerek kalmaz.
Andrey Morozov

1
excel sayfasında KİMLİK değerlerini belirtmezseniz; IDENTITY sütununu kaldırarak ilk 200 satırlık sql betiğini değiştirebilir ve yeniden çalıştırabilirsiniz. Yani IDENTITY olmadan değerleri kopyalayıp yapıştırdığınızda; bu yöntem işe yarayacak.
aozan88

Bu, sorunla karşılaşan diğer herkes için Excel'deki tarih ve saat alanları için geçerli değildir. Tarih saat verileri, bazı nedenlerden dolayı SQL tarafında "ikili" verilere dönüştürülür.
Kevin Vasko

1
@condiosluzverde Kendi cevabınızı göndermenizi tavsiye ederim. Bu cevabın düzenlenmesi durumunda, değişiklikleriniz muhtemelen topluluk moderatörleri tarafından reddedilecektir.
Andrey Morozov

16

Aşağıdaki excel ifadesini kullanabilirsiniz:

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

Bu, sütun adlarını dikkate aldığından ve sütundaki alıntılardan kaynaklanan derleme hatalarını ortadan kaldırdığından Hart CO'nun yanıtını geliştirir. Son sütun, tırnak işaretleri olmadan sayısal değer sütunu örneğidir.


1
İyi iş. GoogleSheets'te sütun adı referanslarını çevreleyen `(mezar / ters işaret) 'i kaldırmak zorunda kaldım.
secretwep

5

Veritabanına bağlı olarak, CSV'ye aktarabilir ve ardından bir içe aktarma yöntemi kullanabilirsiniz.

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, bir Excel Dosyasını içe aktarmak için SSMS'nin içe aktarma sihirbazını kullanabilirsiniz.
Hart CO

1
@HartCO'ya ayrıntı eklemek için - SSMS İçe Aktarma Sihirbazı'na gitmek için veritabanına sağ tıklayın, görevlerin üzerine gelin, bağlam menüsünün altındaki "Verileri İçe Aktar ..." seçeneğine tıklayın. Sihirbazdaki adımları izleyin.
qxotk

2

Verilerinizin etrafına uygun sql ifadelerini satır ekleyerek bir dosya satırına çıktı verecek bir şey yazmak için VB'yi kullanabilirsiniz. Bunu daha önce yapmıştım.


1

İşte çok iyi çalışan başka bir araç ...

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

Sekmeyle ayrılmış değerler alabilir ve bir INSERT betiği oluşturabilir. Sadece kopyalayıp yapıştırın ve 2. adımın altındaki seçeneklerde "İlk satır sütun adlarıdır" kutusunu işaretleyin

Ardından aşağı kaydırın ve 3. adımın altında, "Şema Tablo veya Görünüm Adı:" kutusuna tablo adınızı girin.

Tabloyu sil ve oluştur onay kutularına da dikkat edin ve çalıştırmadan önce oluşturulan komut dosyasını incelediğinizden emin olun.

Bu bulduğum en hızlı ve en güvenilir yol.


1

Kullanım ConvertFrom-ExcelToSQLInsertgelen ImportExcel PowerShell Galerisi'nde

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

Excel dosyası verilerini veritabanına eklemek için oluşturduğum bu sorgu Bu kimlik ve fiyatta sayısal değerler ve tarih alanı da var. Bu sorgu, ihtiyacım olan tüm türleri özetledi Sizin için de yararlı olabilir

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

Excel sayfasını kullanarak ekleme betikleri oluşturmak için aşağıdaki C # Yöntemini kullanabilirsiniz, yalnızca yöntemi çalıştırmadan önce NuGet Paket Yöneticisi'nden OfficeOpenXml Paketini içe aktarmanız gerekir.

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

SQL eklemeleri oluşturmak için güvenilir bir yolum var ve işlem sırasında kısmi parametreleri değiştirebilirsiniz.İşimde bana çok yardımcı oluyor, örneğin, yüzlerce veriyi uyumsuz yapı ve alan sayısı ile veritabanına kopyalamak gibi. IntellIJ DataGrip , kullandığım güçlü araç. DG, WPS ofisinden veya MS Excel'den sütun veya satır bazında veri alabilir. Kopyalamadan sonra, DG verileri SQL eklemeleri olarak dışa aktarabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.