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