SQL Server 2005 - Hızlı El Kitabı
Skip Navigation Links.

FLAT FILES

 

Flat File,hiyerarşik bir yapısı olmayan,sadece bir tek tablonun verilerini sıradan bir şekilde tutan dosyalardır. Bu dosya içerisindeki veriler belli bir düzen içerisinde sıralanmıştır.Örneğin her bir kayıt için 4 adet kolon var ise,her bir kolon arası ‘:’ kakarakteri ile ayrılarak,ayırtedilmesi sağlanmıştır.Her bir yeni kayıt bir sonraki satırda yazılarak kayıtların da ayırtedilmesi sağlanmış olur.İyi tarafı şudur ki,bu şekilde bir kopyalamada(bir tablodan başka bir tabloya veri aktarımında) source,target türü aynı olmak durumunda değildir.Herhangi bir programdan,veri tabanından,dosyadan vs.elde edilen bir flat file,yine başka bir veri tabanındanki bir tabloya rahatlıkla kopyalanabilir.Bu işlemi gerçekleştirebilmek için çeşitli yöntemler vardır;bulk copy program(bcp) ,BULK INSERT T-SQL ifadesi,OPENROWSET T-SQL fonksiyonu ve SQL Server içinde bulunan Import/Export Wizard.

 

 

BCP (Bulk Copy Program)

 

bcp,SQL Server içinde çalıştırılan bir program değildir.Harici bir programdır ve dışarıda Command Prompt’dan çalıştırılabilir.Hızlı ve kullanımı kolaydır.Hem bir dosyadaki verileri bir tabloya aktarmak için hemde bir tablodaki verileri dosyaya aktarmak için kullanılabilir.Ama bunlara rağmen bazı düşünülmesi gereken şeyler vardır;

 

Eğer yüklemek istediğiniz veriler karışık dönüşümler,kontroller gerektiriyor ise bcp programı bu yükleme için uygun değildir.Yükleme esnasında herhangi bir  hata oluşur ise,bu hata belki kullanıcıya bildirilir fakat bu hatayı önlemek adına herhangi bir şey yapılmaz.hata oluştuğunda kullanıcıyı bilgilendirme amaçlı mail gönderme gibi işlemler yapılamaz.

 

bcp programı bazı argümanlar almaktadır.Örneğin bunlardan en önemlileri;

 

·         -t : Kolonları birbirinden ayıran karakter nedir?’in cevabını verebileceğiniz argümandır.

·         -r : Satırları birbirinden ayıran karakter nedir?’in cevabını verebileceğiniz argümandır.

·         -F : Bu argümanda da,yüklemeye hangi kayıttan başlasın?’ın cevabını verirsiniz.Örneğin dosyanızda 100 kayıt var ve 20’sini yüklediniz,21. Yüklenirken hata oluştu.Düzenlemeleri yaptıktan sonra kaldığınız yerden devam etmek için bu parametreyi kullanabilirsiniz.Veya dosyanızda ilk satır kolon adlarını tutuyor ise,bu durumda –F2 diyerek ilk satırın yüklenmesini engelleyebilirsiniz.

 

 

ÖRNEK: Öncelikle C:\Data klasörünün altında KisiInput.bcp isminde bir dosya açıp içine 3 adet kişi kaydı girelim.Kişilerin ID,AdSoyad ve Yaş bilgilerini girelim.her bir kolon arasında TAB,satırlar arasında ise \n(New Line) olacak şekilde ayarlayalım.

 

Örnek Dosya:

 

1             Ahmet Er            29

2             Veli Sezer           40

3             Kerim Arda         15

 

 

Ardından ImportDB isminde bir veri tabanı oluşturup içerisinde KisiID,AdSoyad ve Yas bilgilerinin olduğu,herhangi bir constraint’in olmadığı bir tablo oluşturalım.

 

 

 

Şimdi sırasıyla şu işlemleri gerçekleştirelim;

·         KisiInput.bcp dosyasındaki kayıtları,Kisi tablosuna bcp programı yardımıyla aktaralım

 

bcp ImportDB..Kisi in "C:\Data\KisiInput.bcp" -T –c

 

 

Bu komutla birlikte KisiInput.bcp dosyasındaki kayıtlar Kisi tablosuna aktarılacaktır.Eğer tablo üzerinde bir trigger vs.tanımlanmış ise çalışmayacaktır.

 

-T            : Windows Authentication kullanarak ImportDB veri tabanına bağlan.Eğer SQL Server Authentication kullanmak istiyor isek bu durumda –Uusername ve –Ppassword argümanlarını kullanmam gerekecekti

-c            : Bu argümanın anlamı ise,her bir kolon arasında TAB(\t),her bir satır arasında ise yeni bir satır-New Line-(\n) vardır.

 

·         Kisi tablosundaki verileri KisiOutput.bcp dosyasına aktaralım.

 

Bu durumda şu komutu kullanmalıyız;

 

bcp ImportDB..Kisi out "C:\Data\KisiOutput.bcp" -T –c

 

 

Bu ifadeyle birlikte KisiInput.bcp dosyasının aynısını elde edilmiş olacaktır.

 

·         Kisi tablosunda yaşı 25’den büyük olanların bilgilerini KisiQueryOutput.bcp dosyasına aktaralım.

 

Şu bcp komutunu kullanmamız gerekecektir.

 

bcp "SELECT * FROM ImportDB..Kisi WHERE Yas>25" queryout "C:\Data\KisiQueryOutput.bcp" -T –c

 

 

 

BULK INSERT

 

Bcp programında hem Import hemde Export işlemi gerçekleştirilebiliyordu.BULK INSERT ile sadece Import işlemi gerçekleştirilebilir.BULK INSERT,bcp programına çok benzemektedir.BULK INSERT komutunda da,bcp’de yaptığımız satırlar arasındaki ayıraç nedir,kolonlar arasındaki ayıraç nedir gibi ayarlamalar yapabiliryoruz.

 

ÖRNEK:

 

Durum-1 : Biraz önce kullandığımız KisiInput.bcp dosyasındaki verileri bu sefer BULK INSERT kullanarak Kisi tablosuna aktaralım.

 

BULK INSERT ImportDB..Kisi FROM 'C:\Data\KisiInput.bcp'

 

 

Bu komutla birlikte 3 kayıt Kisi tablosuna düzgün bir şekilde eklenecektir.

 

Durum-2: Bu sefer,KisiInput dosyamızda bazı değişiklikler yapalım ve kolonlar arasında ‘:’ karakteri, kayıtlar arasında ise ‘\t’-TAB olacak şekilde dosyamızı düzenleyelim.Dosyanın son görünmü şu şekilde olacaktır;

 

1:Ahmet Er:29   2:Veli Sezer:40  3:Kerim Arda:15

 

Şimdi böyle bir dosyadaki verileri Kisi tablosuna aktarmak için gerekli BULK INSERT komutunu yazalım;

 

BULK INSERT ImportDB..Kisi FROM 'C:\Data\KisiInput.bcp'

WITH (FIELDTERMINATOR = ':',ROWTERMINATOR = '\t')

 

   

IMPORT/EXPORT WIZARD

 

Yukarıda yaptığımız işlemleri arayüzde Import/Export wizard ile de yapabilmekteyiz.Senaryomuz yine KisiInput.bcp dosyasındaki verileri Kisi tablosuna aktarmak olsun.

 

1)      Veri tabanına sağ tıkla->Tasks->Import Data seç.

2)      Data Source olarak Flat File seçeneğini seç.

3)      Browse diyerek KisiInput.bcp dosyasını seç.

4)      Ardından Columns sekmesine gel ve burada Row Delimeter kısmını Tab {t},Column Delimeter kısmını ise Colon {:} olacak şekilde seç ve Refresh butonuna tıkla.

5)      Next dedikten sonra Destination kısmında KisiInput isminde bir tablo adı verilecektir.Oradan değeri Kisi olarak belirtelim.Yani varolan Kisi tablosuna aktarmak istediğimizi belirtelim.

6)      Ardından Wizard’ı tamamlayalım.Kayıtlar Kisi tablosuna doğru bir biçimde eklenecektir.

 

Şimdide Kisi tablosundaki verileri Kisi.txt dosyasına kolon isimleriyel birlikte nasıl atabileceğimizi gösterelim.

 

1)      Veri tabanına sağ tıkla->Tasks->Export Data seç.

2)      Data Source olarak Kisi tablomuzu seçelim.(Next)

3)      Destinaation kısmında Flat File seçeneğini seçelim ve dosya yolu olarak C:\Data\KisiOuput.txt yolunu belirtelim.

4)      Ardından Copy data from one or more tables or views seçeneğini seçip Next diyelim.

5)      Ardından sırasıyla Row Delimeter Tab {t},Column Delimeter ise Colon {:} olacak biçimde ayarlayalım.

6)      Wizard’ı sonlandıralım.KisiOutput dosyamıza 3 kayıt belirttiğimiz şekilde eklenecektir.(Export edilecektir).

 

BULK XML-OPENROWSET

 

ImportDB veri tabanımızda Kisi tablosuna XML tipinde Adres adında yeni bir kolon ekleyelim;

 

ALTER TABLE Kisi

ADD Adres XML

 

Ardından C:\Data klasörünün altında KisiAdres.xml isminde içeriği aşağıdaki gibi olan bir dosya oluşturalım;

 

<Adres>

                <Sehir>Ankara</Sehir>

                <Semt>Cankaya</Semt>

</Adres>

 

 

Ardından KisiID’si 1 olan kaydın adres bilgilerini KisiAdres.xml dosyasından elde ettiğimiz veriyle düzeltelim;

 

UPDATE Kisi

SET Adres = (SELECT A.Col1

   FROM OPENROWSET(BULK 'C:\Data\KisiAdres.xml',SINGLE_BLOB) AS A(Col1))

WHERE KisiID=1