Favorilerine Ekle | Giriş Sayfan Yap | Tavsiye Et

 

Kurs Tanıtım Sayfası | Süper Üye Kimdir? | Menü Tasarımı Konulu Örnek Ders
Kod İndir| Hazır Kodlar | Makaleler| İpuçları | VB .NET Kursu | Dersler | Forum | Alt Bölümler | Servisler
    Merhaba Misafir
    anasayfa » SQL Bilgisi » Ms SQL Toplu Veri Girişi (Bulk Insert)
Üye Girişi
Kullanıcı Adı:  
Şifre : 
Kaydet ?
Siteden tam olarak faydalanabilmek için üye olmalısınız.
Unuttuğunuz şifrenizi öğrenebilmek için kayıt sırasında verdiğiniz Hatırlatma Cevabı'nı bilmeniz gereklidir.
Şifre hatırlatma işlevini sadece 3 defa kullanma hakkınız vardır.
Kullanıcı adını ve şifresini unutan üyelere email ile yardım verilmez.

Aktivasyon Gelmedi mi?Aktivasyon mesajınız email adresinize gelmedi mi?
Buraya tıklayarak bir kez daha aktivasyon mesajı gönderilmesini sağlayabilirsiniz.
Lütfen email hesabınızın BULK ve SPAM klasörlerini de kontrol ediniz.
Rastgele Makale

Güzel Bir Yazı Animasyonu

Yazar: Fatihavcı

Webmasterlar
Sitenize Ekleyin!
Sitenizde "Son Eklenen 10 Visual Basic Yazısı"'nı göstermek ve içeriğini zenginleştirmek için buraya tıklayınız.

Vbasicmaster.com'a link verin!
Aşağıdaki minik banneri sitenize eklemek için tıklayın!

Üye Sayısı:
Ziyaretçiler nerede?
Yayın № : 1012
Yayın Tar:02.10.2004
Yazar : tr_teknik
Hit :4657

Bu Yazarın Yazıları Sadece bu yazarın  göster
Bu Yazıyı Tavsiye Et

TOPLU VERİ GİRİŞİ - BULK INSERT

Genelde veritabanımızı oluşturan kayıtları kullanıcılara sunduğumuz formlardan toplarız. Ama bazen farklı ihtiyaçlara cevap vermek gerekir. Örneğin işbirliği yaptığınız bir firma istediğiniz kayıtları cd'ye çektiği metin dosyalarında getirdi. Bu gibi durumlarda farklı tür kaynaklardan topluca veriyi veritabanımıza aktarmamız gerekir. Bulk insert bu yöntemlerden biridir. MSDN 'de bulk insert sözdizimi şu şekilde gösteriliyor;

BULK INSERT [ ['veritabanıadi'].[ 'sahip' ] ] { 'tablo_İsmi' FROM 'kaynak_dosya' }
[ WITH
(
[ BATCHSIZE [ = yığın_boyutu] ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | ' istediğimiz_sayfa_kodlaması ' ] ]
[ [ , ] DATAFILETYPE [ = { 'char' | 'native' | 'widechar' | 'widenative' } ] ]
[ [ , ] FIELDTERMINATOR [ = ' alan_ayracı ' ] ]
[ [ , ] FIRSTROW [ = ilk_satir] ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = ' Sekli_belirleyen_dosyanın_yolu ' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH [ = kilobayt/yığın ] ]
[ [ , ] LASTROW [ = son_satir ] ]
[ [ , ] MAXERRORS [ = hata_tepe_sınırı ] ]
[ [ , ] ORDER ( { sütun [ ASC | DESC ] } [ , ... n ] ) ]
[ [ , ] ROWS_PER_BATCH [ = satır/yığın] ]
[ [ , ] ROWTERMINATOR [ = ' satir_ayraç' ] ]
[ [ , ] TABLOCK ]
)
]

Yukarıdaki seçeneklerden önemli olan bazılarını inceleyelim;

BATCHSIZE (Yığın Boyutu)
Bu seçenek bize yığının satır sayısını belirleme imkanı verir. Her yığın SQL Server'da farklı bir transaction olarak işlendiğinden, aslında bu seçenek ile bir hata durumunda geri alınabilir birimi belirlemiş oluruz. Bu seçeneğin varsayılan değeri belirtilen kaynaktaki tüm veriyi tek bir transaction olarak aktarmak üzere yapılandırılmıştır.

CHECK_CONSTRAINTS
Bulk insert esnasında, veritabanında önceden belirlediğimiz kısıtların etkin olup olmayacağını belirleriz. Varsayılan olarak kısıtlar bulk insert sırasında dikkate alınmazlar.
CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | ' istediğimiz_sayfa_kodlaması' ]
Bu seçenek sayesinde char , varchar , veya text tipleri için karakterlerin hangi kodlamaya göre değerlendirileceğini belirleyebiliriz.
ACP:Belirttiğimiz tipleri ANSI/Microsoft Windows (ISO 1252) kodlamasından SQL Server sayfa kodlamasına çevirir.
OEM: OEM kodlamasından SQL Server sayfa kodlamasına dönüşüm yapılır.
RAW : Herhangi bir dönüşüm yapmadığından en hızlı seçenektir.
Son olarak da istediğimiz herhangi bir sayfa kodlamasını belirtebiliriz. Türkçe için 28599 gibi.
FIELDTERMINATOR [ = ' alan_ayracı' ]
Kaynak dosyasındaki alanları ayırmak için kullanılan ayracı belirler. Varsayılan karakter paragraftır. ( (tab) )

FIRSTROW [ = ilk_satir]
Bulk insert için hangi satırdan başlanacağını belirler. Varsayılan değer 1'dir.

FIRE_TRIGGERS
Varsayılan olarak bulk insert işleminden sonra herhangi bir tetikleyici (trigger) ateşlenmez. Ama bu seçenekle bulk insert sonrası hangi tetikleyicinin ateşleneceğini belirtebiliriz.

KEEPIDENTITY
Kimlik (Identity ) alanının kaynak dosyadan alınıp alınmayacağını belirler. Eğer değer atanmazsa varsayılan olarak kimlik alanı kaynak dosyadan alınmaz ve otomatik olarak benzersiz kimlik numaraları atanmaya başlanır.

KEEPNULLS
Bulk insert işleminde karşılaşılan boş kayıtlar için null değerin mi yoksa tabloda belirlenmiş varsayılan değerin mi atanacağını belirler.

LASTROW [ = son_satir]
En son hangi satırın kopyalama işlemine tabi tutulacağını belirler. Varyılan değer, kaynak dosyadaki son satırı gösteren 0 'dır.

MAXERRORS [ = hata_tepe_sınırı]
Kopyalama sırasında, kaçıncı hatada işlemin iptal edileceğini belirler. Varsayılan değer 10'dur.

ORDER ( { sütun [ ASC | DESC ] } [ , ... n ] )
Kaynak dosyanın nasıl sıralandığını belirler. Eğer kaynak kümelenmiş dizinlere göre sıralanmış ise işlem daha hızlı gerçekleşecektir. Varsayılan olarak kaynak dosya sıralanmamış olarak kabul edilir. n sayısı sıralama için birden fazla alanın kullanılabileceğini gösterir.

ROWTERMINATOR [ = ' satir_ayraç'' ]
Yeni satırı hangi karakterin temsil ettiğini belirler. Varsayılan değer yeni satır karakteri olan 'dir.

TABLOCK
Bulk insert esnasında tablo bazında kilitleme yapılıp yapılmayacağını belirler.

Son olarak da bir örnek üzerinde bulk insert işleminin nasıl yapıldığını örnekleyelim. Bunun için aşağıdaki kodcukları query analyzer veya enterprise manager'ı kullanarak işletin ki örneğimizde kullanacağımız tabloyu oluşturmuş olalım.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblBulk]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tblBulk]
GO

CREATE TABLE [dbo].[tblBulk]
(
[MusteriId] [char] (10) COLLATE Turkish_CI_AS NULL ,
[Ad] [char] (10) COLLATE Turkish_CI_AS NULL ,
[Soyad] [char] (10) COLLATE Turkish_CI_AS NULL
)
ON [PRIMARY]
GO

Böylelikle MusteriId, Ad ve Soyad sütunlarından oluşan tblBulk tablosunu oluşturmuş olduk. Şimdi bu tabloya girilmek üzere bir metin dosyası hazırlayalım. C sürücüsünün kök dizinde Musteri.txt adında bir dosya oluşturun. İçeriğini;

Must01---Ali---Rıza
Must02---Veli---Dereli
Must03---Erkam---Çankaya
Must04---Ali---Eşiyok

olacak şekilde doldurun. Buradan da anlaşıldığı üzere her alanı '---' karakter dizisiyle ayrılmış bir şekilde kayıtlar belirtilmiş ve her farklı kayıt ise yeni satırda ( ) yazılmış durumda.

Şimdi bu dosyadan kayıtları tablomuza yükleyecek bulk insert komutumuzu yazalım. Ben tabloyu Northwind veritabanında oluşturduğum için,

BULK INSERT Northwind.dbo.[tblBulk]
FROM 'c:Musteri.txt' WITH (FIELDTERMINATOR = '---', ROWTERMINATOR = ' ', CODEPAGE = '28599')

İşte bu kadar. Böylelikle metin dosyasından okuduğumuz kayıtları veritabanımıza çekmiş olduk. Yorumlarınızı bekliyorum.

Kaynaklar:
http://www.sqlteam.com
http://msdn.microsoft.com




Bu sayfa için henüz yorum eklenmemiş.

© Hakan Ersöz 2000-2013| Üyelik Sözleşmesi | | Ödeme Bildirimi
Sitemizden yenilikleri hemen öğrenin, pop upları engelleyin, chat yapın... ToolBarımızı indirin:
Vasicmaster Toolbar'ı indirin