Excel veritabanına nasıl aktarılır?

Excel'i veritabanına aktarmanın en basit yolu sayfayı SQL'e çevirmektir: uygun sütun türleriyle bir CREATE TABLE komutu ve satırlar için INSERT komutları; bunları SQL Server Management Studio, MySQL Workbench, pgAdmin ya da herhangi bir istemcide çalıştırırsın. Bu sayfadaki dönüştürücü bu SQL'i tarayıcında SQL Server, MySQL, PostgreSQL ve SQLite için yazar; milyonlarca satır içinse CSV'ye kaydedip veritabanının toplu yükleme komutunu kullan.

5 dk okuma

Kısa cevap

Veritabanı bir .xlsx dosyasını kendi başına okuyamaz. Bir şeyin sayfayı okuması, her sütunun türüne karar vermesi, tabloyu oluşturması ve satırları eklemesi gerekir. Bunu veritabanının içe aktarma sihirbazına bırakabilir, bir CSV'yi toplu yükleme komutuyla yükleyebilir ya da her istemcinin çalıştırabileceği düz SQL üretebilirsin.

Üretilen SQL en taşınabilir ve kontrolü en kolay yoldur; veritabanına dokunmadan önce neyin oluşturulacağını tam olarak görürsün. Aşağıdaki dönüştürücüde .xlsx ya da .csv dosyasını aç (ya da Excel'den kopyaladığın hücreleri yapıştır), Veritabanı'nı seç, Tablo adı'nı yaz ve betiği kopyala ya da indir. Sütun türleri veriden bulunur; barkodlar ve baştaki sıfırlı kodlar metin kalır.

Burada dene: Excel'den SQL'e

Aracın tam sayfasını aç

Önce sayfayı hazırla

Başarısız aktarımların çoğu veritabanından değil Excel sayfasından kaynaklanır. Tablolar insanlar için hazırlanır; veritabanı ise tek, temiz bir veri dikdörtgeni ister. Aktarmadan önce iki dakikanı buna ayır:

  • Tek bir başlık satırı ve her sütuna farklı bir ad. Tablonun üstündeki başlıkları, birleştirilmiş başlık hücrelerini ve ikinci başlık satırlarını kaldır.
  • Her kayıt bir satır. Toplam ve ara toplam satırlarını, boş ayırıcı satırları ve verinin altındaki notları sil.
  • Her sütunda tek tür değer. Fiyat sütununda bazı satırlarda sorunuz yazmasın; boş bırak, NULL olur.
  • Veri içinde birleştirilmiş hücre olmasın. Birleştirmeyi kaldır ve değeri ilgili her satıra yaz.
  • Formüller sorun değil: dosyada kayıtlı son hesaplanmış değer kullanılır. Son değişiklikten sonra çalışma kitabının hesaplanıp kaydedildiğinden emin ol.
  • Her tablo kendi sayfasında olsun. Çalışma kitabında birden çok sayfa varsa dönüştürücü bir Sayfa seçici gösterir.

Yöntemlerin karşılaştırması

YöntemNe için uygunDikkat
Üretilen SQL (bu sayfa)On binlerce satıra kadar, her veritabanı, okunabilir betikÇok büyük dosya çok büyük betik demek
SQL Server Import and Export WizardSQL Server'a düzenli aktarım.xlsx okumak için Microsoft Access Database Engine gerekir; 32 ve 64 bit sürümleri uyuşmalı
SSMS Import Flat FileCSV'yi SQL Server'aBitirmeden önce tahmin edilen türleri kontrol et
BULK INSERT (SQL Server), LOAD DATA (MySQL), COPY (PostgreSQL)CSV'den milyonlarca satırSunucuda dosya erişim izni, ayraç ve kodlama ayarları
MySQL Workbench Table Data Import WizardCSV ya da JSON'u MySQL'eBüyük dosyalarda yavaş
pgAdmin Import/ExportCSV'yi var olan PostgreSQL tablosunaTablo önceden oluşturulmalı
sqlite3 kabuğunun .import komutu (csv modu)CSV'yi SQLite'aTablo yoksa sütunlar TEXT oluşturulur

Üretilen SQL ile adım adım

  • Dosyayı aç ya da hücreleri yapıştır. İlk satır sütun adı olur; verinde başlık yoksa İlk satır başlık seçeneğini kapat.
  • Veritabanı'nı seç: SQL Server, MySQL, PostgreSQL ya da SQLite. Tırnaklama, türler ve kaçış kuralları buna göre değişir.
  • Tablo adı'nı yaz. Adları sadeleştir açıkken Ürün Adı, urun_adi olur; sonraki her sorguda adları tırnaklama zahmetinden kurtarır.
  • INSERT başına satır'ı seç. 100 güvenli bir başlangıç; büyük gruplar daha hızlı aktarılır. SQL Server tek VALUES listesinde en fazla 1000 satır kabul ettiği için araç SQL Server'da bunun üstüne çıkmaz.
  • Ekleri belirle: CREATE TABLE tablo tanımını yazar, Önce tabloyu sil aynı adlı mevcut tabloyu siler (sadece değiştirmek istediğin tablolarda kullan), Transaction kullan ise aktarımı ya hep ya hiç yapar.
  • SQL'i kopyala ya da .sql dosyasını indir, sonra veritabanı istemcinde çalıştır.

Dönüştürücünün seçtiği sütun türleri

Her sütun, içindeki tüm değerlere uyan en dar türü alır. Metin sütunlarının uzunluğu en uzun değerden yukarı yuvarlanır (örneğin en fazla 37 karakter için VARCHAR(50)); gerekirse sonradan genişletebilirsin.

Sütundaki veriSQL ServerMySQLPostgreSQLSQLite
Tam sayılarINT ya da BIGINTINT ya da BIGINTINTEGER ya da BIGINTINTEGER
Ondalıklı sayılarDECIMAL(p, s)DECIMAL(p, s)NUMERIC(p, s)REAL
true ya da falseBITTINYINT(1)BOOLEANINTEGER
TarihDATEDATEDATETEXT
Tarih ve saatDATETIME2DATETIMETIMESTAMPTEXT
Metin, baştaki sıfırlı kodlarNVARCHAR(n)VARCHAR(n)VARCHAR(n)TEXT

Sık sorunlar ve çözümleri

  • Tarihler 45000 gibi sayı olarak geliyor. Excel tarihleri gün sayısı olarak saklar (45000, 15 Mart 2023'tür). Dönüştürücü .xlsx okurken tarih hücrelerini gerçek tarihe çevirir; başka araçlarda sütunu önce tarih biçimine almak gerekebilir.
  • Baştaki sıfırlar kayboluyor. Barkod, posta kodu ve 00123 gibi ürün kodları metin olmalı. Dönüştürücü değerleri sıfırla başlayan sütunu metin bırakır; 15 haneden uzun sayılar da metin kalır.
  • SQL Server'da Türkçe harfler soru işaretine dönüyor. Unicode metin NVARCHAR sütun ve metinlerin başında N öneki ister; üretilen SQL Server betiği ikisini de kullanır. MySQL'de utf8mb4 tablo kullan.
  • Virgüllü ondalık sayılar. Noktalı virgülle ayrılmış CSV'lerde 1.499,90 gibi değerler 1499.90 olarak okunur. Virgülle ayrılmış dosyalarda virgül sütun ayracıdır, bu tür değerler tırnak içinde olmalı.
  • Boş hücreler. NULL olur ve sütun boş geçilebilir oluşturulur. Boş metin istiyorsan aktarımdan sonra değiştir.
  • Metin içindeki tırnaklar. Kuzey'in gibi bir kesme işareti elle yazılmış INSERT'i bozar; üretilen değerlerde kaçış yapılır, MySQL için ters eğik çizgiler de kaçırılır.

Ne zaman toplu yükleme kullanmalı?

INSERT betikleri birkaç binden on binlerce satıra kadar idealdir: okunabilir, saklanabilir ve her yerde çalışır. Yüz binlerce ya da milyonlarca satırda betik çok büyür ve çalıştırması toplu yüklemeden yavaş olur.

Bu durumda sayfayı CSV UTF-8 olarak kaydet ve veritabanının toplu komutunu kullan: SQL Server'da BULK INSERT, MySQL'de LOAD DATA LOCAL INFILE, PostgreSQL'de COPY ya da psql'in \copy komutu. İşe yarayan bir ara yol: dönüştürücüye verinin bir örneğinden sadece CREATE TABLE komutunu yazdır, böylece mantıklı sütun türleri alırsın; sonra tam CSV'yi toplu komutla o tabloya yükle.

Adım adım

  1. Veriyi ekle.xlsx ya da .csv dosyasını aç veya Excel'de hücreleri kopyalayıp giriş kutusuna yapıştır.
  2. Veritabanını ve tabloyu seçVeritabanı'ndan SQL Server, MySQL, PostgreSQL ya da SQLite'ı seç ve Tablo adı'nı yaz.
  3. Seçenekleri ayarlaINSERT başına satır'ı seç; gerekirse CREATE TABLE, Önce tabloyu sil, Transaction kullan ya da Adları sadeleştir'i işaretle.
  4. Sütun türlerini kontrol etSonuçtaki CREATE TABLE kısmını oku; kodların metin, sayıların sayısal olduğundan emin ol.
  5. SQL'i çalıştırBetiği kopyala ya da .sql dosyasını indir ve veritabanı istemcinde çalıştır.

Sık sorulan sorular

Excel dosyasını doğrudan SQL Server'a aktarabilir miyim?

Evet, SQL Server Import and Export Wizard ile; ama .xlsx okumak için bilgisayarda Microsoft Access Database Engine kurulu olmalı. INSERT komutu üretmek bu bağımlılığı ortadan kaldırır ve her SQL Server istemcisinde çalışır.

Dönüştürmek için tablom bir yere yükleniyor mu?

Hayır. Dosya tarayıcında okunur, SQL de tarayıcında üretilir. Hiçbir şey sunucuya gitmez; müşteri listeleri ve fiyat dosyalarında bu önemlidir.

INSERT komutlarıyla kaç satır aktarabilirim?

On binlerce satır rahat çalışır. Milyonlarca satır için CSV dosyasıyla BULK INSERT, LOAD DATA ya da COPY gibi bir toplu yükleme komutu kullan.

Eski .xls dosyaları destekleniyor mu?

Hayır. Dosyayı Excel'de ya da LibreOffice'te açıp .xlsx olarak kaydet ve o kopyayı aç. CSV dosyaları da olur.

Var olan bir tabloya satır ekleyebilir miyim?

Evet. CREATE TABLE ve Önce tabloyu sil seçeneklerini kapat, mevcut tablo adını yaz ve sütun adlarının uyuştuğundan emin ol. Sadece INSERT komutları yazılır.

İnternetsiz çalışır mı?

Evet. Sayfayı bir kez açtıktan sonra internet bağlantısı olmadan da çalışır.