Ana Sayfa > SQL ServerT-SQL > Bulk Insert

Bulk Insert

Bulk Insert , metin Dosyasındaki veriyi, SQL Server da bir tabloya aktarmak amacı ile kullandığımız T-SQL deyimidir. 

Transact-SQL sözdizimi kuralı

BULK INSERT databaseADI.TabloADI FROM 'Dosya_Yolu'
 WITH
(
  ,  BATCHSIZE = yığın_boyutu
  ,  CHECK_CONSTRAINTS
  ,  CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'sayfa_kodlaması' }
  ,  DATAFILETYPE ={ 'char' | 'native'| 'widechar' | 'widenative' }
  ,  FIELDTERMINATOR = 'kolon_ayracı'
  ,  FIRSTROW = ilk_satır_no
  ,  FIRE_TRIGGERS
  ,  FORMATFILE = 'format_file_path'
  ,  KEEPIDENTITY
  ,  KEEPNULLS
  ,  KILOBYTES_PER_BATCH = kilobayt/yığın
  ,  LASTROW = son_satır
  ,  MAXERRORS = max_hata_sayısı
  ,  ORDER ( { column  ASC | DESC  }  ,...n  )
  ,  ROWS_PER_BATCH = rows_per_batch
  ,  ROWTERMINATOR = 'satır_ayracı'
  ,  TABLOCK
  ,  ERRORFILE = 'file_name'
)

Seçenekleri İnceleyelim;

BATCHSIZE
Bu seçenek ile Yığın satır sayısını tanımlarız. SQL Server da her yığın farklı bir transaction olarak işlenir.BATCHSIZE ile olası bir hatada geri alınacak birimi tanımlamış oluruz .Seçenek kullanılmaz ise tüm veri tek bir transaction olarak işlem görecektir.

CHECK_CONSTRAINTS
Veritabanında belirlenmiş kısıtlamaların etkin olup olmayacağını belirler.Seçenek kullanılmadığında, kısıtlamalar bulk insert sırasında dikkate alınmayacaktır.

CODEPAGE
Char , Varchar , veya text tipleri için karakterlerin hangi kodlamaya göre değerlendirileceğini belirleyebiliriz.
ACP: ANSI/Microsoft Windows (ISO 1252) kodlamasından SQL Server sayfa kodlamasına çevirir.
OEM: OEM kodlamasından SQL Server sayfa kodlamasına dönüştürür.
RAW : Herhangi bir dönüşüm yapılmaz.
Dilersek kendi sayfa kodlamamızı  belirtebiliriz, Türkçe için 28599 kullanabilirsiniz.

FIELDTERMINATOR
Text dosyadaki kolonları ayırmak için kullanılan ayrac karakteri belirtiriz. Varsayılan karakter paragraftır. ( (tab) \t)

FIRSTROW
İşlemin 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) tetiklenmez. 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.

KILOBYTES_PER_BATCH
Yığın başına düşen Kilobayt sınırı tanımıdır.Varsayılan değeri yoktur. 

LASTROW
En son hangi satırın işlem göreceğini belirler. Varsayılan değer, Text dosyadaki son satırın sayısıdır.

MAXERRORS
Kaçıncı hatadan sonra işlemin iptal edileceğini belirler. Varsayılan değer 10’dur.

ORDER
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
Yeni satıra geçişi hangi karakterin temsil ettiğini belirler. Varsayılan değer, yeni satır karakteri olan \r\n ‘dir.

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

ERRORFILE
Oluşan hataların yazılacağı dosyanın tanımlandığı seçenektir.

 

Olası Hatalar

You do not have permission to use the bulk load statement.

Sorguyu çalıştıran SQL User ‘ın Bulk komutunu çalıştırmak için gerekli role(izne) sahip olmamasından kaynaklanır. User, ‘sysadmin’ veya ‘bulkadmin’ rollerinden birinde olmalıdır.

—–

Yorum Yaz