BCP (Bulk Copy Program), Microsoft SQL Server’da veri dışa aktarma (export) ve içe aktarma (import) işlemleri için kullanılan güçlü bir komut satırı aracıdır.
BCP (Bulk Copy Program), komut satırı (Command Prompt / PowerShell) üzerinden kullanılan bir SQL Server aracıdır. Herhangi bir GUI (arayüz) yoktur.
BCP , bir SQL Server tablosu veya sorgusundan gelen verileri:
- Bir iç dosyayı dışa aktarmak (export)
- Bir dış dosyadan SQL Server tablosuna içe aktarmak (import)
için kullanılır.
Aşağıdaki komut ile BCP komutuyla bir tabloyu txt uzantısına csv formatında atabiliriz.
-T: windows kimlik doğrulama sistemi kullanacağını söylemektedir.
Character formatında (-c) dışa aktarır
bcp AdventureWorks2015.dbo.Musteriler out "C:\BULK_INSERT\musteriler.txt" -c -t, -r\n -S S1\TEST -T



-t ifadesinden sonra ; kullanıldığı için sütünlar ; ile birbirleriyle ayarladık.
-r ifadesinden sonra satırların ! işaretinden sonra alt satıra geçmesi için -r!\n ifadesi kullanıldı.


Yukarıdaki işlemlerden sonra bir txt formatındaki dosyayı veritabanı altındaki bir tabloya atma komutu:
bcp AdventureWorks2015.dbo.Musteriler in "C:\BULK_INSERT\musteriler2.txt" -c -t; -r!\n -S .\TEST -T
Yukarıdaki komutu çalıştırmadan önce tablomuzun boş durumda olduğunu görmekteyiz.


İlk ve ikinci örneğimizde dikkat ederseniz in ve out ifadelerin kullanıldığını görmekteyiz. Bu ifade ile tablomuzun içeri ve dışarı aktarılacağını belirleriz.
Tablomuza tekrardan select çektiğimizde verilerin aktarıldığını görmekteyiz.

SELECT Sorgusu ile Export (queryout) işlemi gerçekleştirebiliriz.
bcp "SELECT Ad, Soyad, Sehir FROM AdventureWorks2015.dbo.Musteriler" queryout "C:\BULK_INSERT\musteriler3.txt" -c -t; -S .\TEST -T

Select sorgusunda çektiğimiz kolonların belirtilen isimde ilgili klasör altında olduğunu görüş oluyoruz.


Yukarıdaki işlemleri windows auth. ile yapmayıp sql auth. ile yapmaya çalışırsak aşağıdaki komut kullanılmaktadır.
-T (Windows auth) yerine -U ve -P ile SQL Login kullanılır.
bcp AdventureWorks2015.dbo.Musteriler out "C:\BULK_INSERT\musteriler4.txt" -c -S S1\TEST -U BULKLOGIN -P 1

Parametrelerin Anlamı:
Parametre | Açıklama |
---|---|
in | Veri dış dosyadan tabloya aktarılır |
out | Tablo dış dosyaya aktarılır |
queryout | SELECT sorgusunun çıktısı dosyaya yazılır |
-c | Character (varsayılan) format (tüm alanlar düz metin) |
-n | Native format (SQL Server’ın dahili binary biçimi) |
-N | Unicode native format (NCHAR/NVARCHAR için) |
-w | Unicode character format (UTF-16) |
-t | Alan ayırıcı (default: tab \t) |
-r | Satır ayırıcı (default: newline \n) |
-S | Sunucu ve instance adı |
-d | Veritabanı adı (opsiyonel, çoğu zaman gerekmez) |
-T | Windows Authentication |
-U / -P | SQL kullanıcı adı ve şifre |
-F / -L | İlk ve son satır (satır aralığı seçimi) |
-e | Hatalı kayıtları yazmak için hata dosyası |
-k | NULL değerleri korunur |
-b 1000 | 1000 satırda bir commit (batch) yapılır |
Son olarak BCP komutunda belirli bir aralıktaki verileri almak için aşağıdaki komut kullanılmaktadır.
bcp "SELECT Ad, Soyad, Sehir FROM AdventureWorks2015.dbo.Musteriler Where MusteriID <=10" queryout "C:\BULK_INSERT\musteriler5.txt" -c -t, -S .\TEST -T

Select ifadesinden sonra hangi verileri almak istiyorsak verilerimiz o şekilde alına bilinmektedir.
Avantaj | Açıklama |
---|---|
Çok hızlıdır | Milyonlarca satırı saniyeler içinde aktarabilir. Minimal işlem yapar. |
Hafif ve kurulumsuz | bcp.exe komut satırından doğrudan çalışır. Arayüze ihtiyaç yok. |
Dışa ve içe aktarma yapabilir | Verileri .txt, .csv, vs. dosyalara kolayca dışa aktarır veya içe alır. |
Sorgu destekler (queryout) | Filtreli, sütun seçmeli export mümkündür. |
Büyük veriler için idealdir | Düşük bellek kullanımı ve batch yükleme özelliği sayesinde sistem kaynaklarını zorlamaz. |
Format dosyası ile esneklik | Özel veri yapıları için .fmt dosyası ile kontrol sağlanabilir. |
Otomasyona uygundur | PowerShell, batch script, SQL Agent job ile kolayca otomatikleştirilebilir. |
BCP, SQL Server ile veri kaynağı (dosya sistemi) arasında en az katmanla ve doğrudan erişimle veri taşıdığı için çok hızlıdır. BCP, SQL Server’ın ODBC (veya OLE DB) üzerinden doğrudan veri taşır. GUI (arayüz), SSMS, ORM (Entity Framework, LINQ) gibi katmanlar kullanılmaz. BCP, veriyi satır satır değil, batch (örneğin 1000 satır) olarak işler. Bu sayede disk ve ağ I/O verimliliği artar. BCPişlemleri varsayılan olarak minimal logging ile çalışır. Özellikle TABLOCK ve SIMPLE recovery mode altında, log yazımı azaltılır.
Yöntem | Hız (Göreli) | Açıklama |
---|---|---|
bcp | ⚡⚡⚡⚡⚡ | En hızlısı |
BULK INSERT | ⚡⚡⚡⚡ | Neredeyse aynı hızda |
SSIS | ⚡⚡⚡ | Esnek ama daha ağır |
SSMS Import Wizard | ⚡⚡ | GUI, yavaş |
INSERT döngüsü | ⚡ | Satır satır işlem – yavaş |
Dezavantaj | Açıklama |
---|---|
Arayüzü yoktur (CLI) | Sadece komut satırından çalışır. Hatalar, format sorunları anlaşılması zor olabilir. |
Hata ayıklama zordur | Dosya formatı veya veri tipi uyuşmazlıklarında detaylı açıklama vermez. |
Yalnızca tablo veya SELECT sorgusu destekler | JOIN, GROUP BY, ORDER BY gibi karmaşık SQL işlemleri zor uygulanır. |
Veri dönüştürme işlemleri zayıftır | CAST, CONVERT, encoding gibi işlemler için ek sorgular gerekir. |
Hassas veri aktarımında dikkatli olunmalı | Veriler düz metin halinde yazılırsa güvenlik açığı olabilir. Şifreler açık geçilebilir (-P). |
Veri bütünlüğü kontrolü yoktur | Primary key, foreign key, check constraint gibi kurallar ihlal edilebilir. |
SSMS’e göre daha teknik bilgi gerektirir | Özellikle format dosyası, terminatörler, karakter setleri dikkat ister. |
Bu makalede BCP komutunu detaylı bir şekilde görmüş olduk. Başka bir makalede görüşmek dileğiyle..
“Namazı dosdoğru kılın, zekatı verin; önceden kendiniz için hayır olarak neyi takdim ederseniz, onu Allah Katında bulacaksınız. Şüphesiz Allah, yaptıklarınızı görendir.” Bakara Suresi, 110. Ayet