Aracılığıyla paylaş


Toplu Kopyalama İşlemleri Gerçekleştirme

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

OLE DB sürücüsünü indirme

SQL Server toplu kopyalama özelliği, büyük miktarda verinin SQL Server tablosuna veya görünümüne aktarılmasını destekler. Veriler ayrıca bir SELECT ifadesi belirterek aktarılabilir. Veriler, SQL Server ile ASCII dosyası gibi bir işletim sistemi veri dosyası arasında taşınabilir. Veri dosyası farklı formatlarda olabilir; format, bir format dosyasında toplu kopyalama olarak tanımlanır. İsteğe bağlı olarak, veri program değişkenlerine yüklenebilir ve toplu kopyalama fonksiyonları ve yöntemleriyle SQL Server'a aktarılabilir.

Bu özelliği gösteren örnek uygulama için bkz. IRowsetFastLoad (OLE DB) kullanarak Toplu Veri Kopyala.

Bir uygulama genellikle toplu kopyayı aşağıdaki şekillerden biriyle kullanır:

  • Bir tablodan, görünümden veya Transact-SQL ifasının sonuç kümesinden veri dosyasına toplu kopyalama, burada veri tablo veya görünümle aynı formatta saklanır.

    Buna yerel mod veri dosyası denir.

  • Bir tablodan, görünümden veya Transact-SQL ifadesinin sonuç setinden veri dosyasına toplu kopyalama, burada veri tablo veya görünüm formatından farklı bir formatta saklanır.

    Bu durumda, veri dosyasında saklandığı her solun özelliklerini (veri türü, konum, uzunluk, terminatör vb.) tanımlayan ayrı bir format dosyası oluşturulur. Tüm sütunlar karakter formatına dönüştürülürse, ortaya çıkan dosyaya karakter modlu veri dosyası denir.

  • Bir veri dosyasından bir tabloya veya görünüme toplu kopya yapın.

    Gerekirse, veri dosyasının düzenini belirlemek için bir format dosyası kullanılır.

  • Verileri program değişkenlerine yükleyin, ardından verileri bir tabloya veya görünüme aktararak toplu kopyalama fonksiyonlarını kullanarak sıralı bir sırada toplu kopyalama yapın.

Toplu kopyalama fonksiyonları tarafından kullanılan veri dosyalarının başka bir toplu kopyalama programı tarafından oluşturulması gerekmez. Diğer herhangi bir sistem, toplu kopyalama tanımlarına göre bir veri dosyası oluşturabilir ve dosyayı biçimlendirebilir; bu dosyalar, verileri SQL Server'a aktarmak için SQL Server toplu kopyalama programıyla kullanılabilir. Örneğin, tab-delimited bir dosyada bir elektronik tablodan veri dışa aktarabilir, sekmeyle ayrılmış dosyayı tanımlayan bir format dosyası oluşturabilir ve ardından toplu kopyalama programı kullanarak verileri hızla SQL Server'a aktarabilirsiniz. Toplu kopya ile oluşturulan veri dosyaları diğer uygulamalara da aktarılabilir. Örneğin, toplu kopyalama fonksiyonlarını kullanarak verileri bir tablodan veya görünümden sekmelerle ayrılmış bir dosyaya aktarabilir ve ardından bir elektronik tabloya yüklenebilir.

Toplu kopyalama fonksiyonlarını kullanmak için uygulama kodlayan programcılar, iyi toplu kopyalama performansı için genel kurallara uymalıdır. SQL Server'da toplu kopyalama işlemleri desteği hakkında daha fazla bilgi için Toplu Veri İçe ve Dışa Aktarma (SQL Server) bölümüne bakınız.

Sınırlamalar ve Kısıtlamalar

Bir CLR kullanıcı tanımlı tip (UDT) ikili veri olarak sınırlandırılmalıdır. Bir format dosyası hedef UDT sütunu için veri tipi olarak SQLCHAR'ı belirtse bile, BCP aracı veriyi ikili olarak ele alır.

Toplu kopyalama işlemlerinde SET FMTONLY OFF kullanma. FMTONLY KAPATMA toplu kopyalama işleminizin başarısız olmasına veya beklenmedik sonuçlar vermesine neden olabilir.

SQL Server için OLE DB Sürücüsü

SQL Server için OLE DB Sürücüsü, SQL Server veritabanı ile toplu kopyalama işlemlerini gerçekleştirmek için iki yöntem uygular. İlk yöntem, bellek tabanlı toplu kopyalama işlemleri için IRowsetFastLoad arayüzünün kullanılmasını içerir; ikincisi ise dosya tabanlı toplu kopyalama işlemleri için IBCPSession arayüzünün kullanılmasını içerir.

Bellek Tabanlı Toplu Kopyalama İşlemlerinin Kullanımı

SQL Server için OLE DB Sürücüsü, SQL Server bellek tabanlı toplu kopyalama işlemlerini desteklemek için IRowsetFastLoad arayüzünü uygular. IRowsetFastLoad arayüzü, IRowsetFastLoad::Commit ve IRowsetFastLoad::InsertRow yöntemlerini uygular.

IRowsetFastLoad için oturumu etkinleştirmek

Tüketici, SQL Server için OLE DB Sürücüsü'nü toplu kopyalama ihtiyacını bildirerek SQL Server'a özgü veri kaynağı özelliğini SSPROP_ENABLEFASTLOAD olarak VARIANT_TRUE olarak ayarlar. Özellik veri kaynağında ayarlandığında, tüketici SQL Server oturumu için bir OLE DB Sürücüsü oluşturur. Yeni oturum, tüketicinin IRowsetFastLoad arayüzüne erişimi sağlıyor.

Uyarı

Eğer veri kaynağını başlatmak için IDataInitialize arayüzü kullanılıyorsa, IOpenRowset::OpenRowset metodunun rgPropertySets parametresinde SSPROP_IRowsetFastLoad özelliğini ayarlamak gereklidir; aksi takdirde, OpenRowset yöntemine yapılan çağrı E_NOINTERFACE döner.

Toplu kopyalama oturumu etkinleştirmek, oturumdaki arayüzler için OLE DB Driver for SQL Server desteğini kısıtlar. Toplu kopyalama etkinleştirilmiş oturum yalnızca aşağıdaki arayüzleri sunar:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Toplu kopyalama etkinleştirilmiş sıra kümelerinin oluşturulmasını devre dışı bırakmak ve SQL Server oturumu için OLE DB Sürücüsünün standart işlemeye dönmesine neden olmak için SSPROP_ENABLEFASTLOAD VARIANT_FALSE'ye sıfırlayın.

IRowsetFastLoad Sıra Kümeleri

SQL Server için OLE DB Sürücüsü toplu kopyalama satır kümeleri yalnızca yazılabilir, ancak tüketicinin SQL Server tablosunun yapısını belirlemesine olanak tanıyan arayüzler sunar. Aşağıdaki arayüzler, SQL Server için toplu kopya etkinleştirilen OLE DB Sürücüsü'nde görünür:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Sağlayıcıya özgü özellikler, SQL Server için OLE DB Sürücüsünün SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS ve SSPROP_FASTLOADKEEPIDENTITY kontrol davranışlarını toplu kopyalama satır kümesini içerir. Özellikler, rgPropertySetsIOpenRowset parametre üyesinin rgProperties üyesinde belirtilir.

Özellik Kimliği Description
SSPROP_FASTLOADKEEPIDENTITY Köşe: Hayır

R/W: Oku/Yaz

Tip: VT_BOOL

Varsayılan: VARIANT_FALSE

Tanım: Tüketici tarafından sağlanan kimlik değerlerini korur.

VARIANT_FALSE: SQL Server tablosunda bir kimlik sütununun değerleri SQL Server tarafından oluşturulur. Sütuna bağlı herhangi bir değer, SQL Server için OLE DB Sürücüsü tarafından göz ardı edilir.

VARIANT_TRUE: Tüketici, SQL Server kimlik sütunu için bir değer sağlayan bir erişimciyi bağlar. Kimlik özelliği, NULL kabul eden sütunlarda mevcut değildir, bu nedenle tüketici her IRowsetFastLoad::Insert çağrısında benzersiz bir değer sağlar.
SSPROP_FASTLOADKEEPNULLS Köşe: Hayır

R/W: Oku/Yaz

Tip: VT_BOOL

Varsayılan: VARIANT_FALSE

Açıklama: DEFAULT kısıtlaması olan sütunlar için NULL tutar. Yalnızca NULL kabul eden ve DEFAULT kısıtlaması uygulanan SQL Server sütunlarını etkiler.

VARIANT_FALSE: SQL Server, OLE DB Driver for SQL Server tüketicisi sütun için NULL içeren bir satır eklediğinde SQL Server için varsayılan değeri ekler.

VARIANT_TRUE: SQL Server OLE DB Driver for SQL Server tüketicisi sütun için NULL içeren bir satır eklediğinde, SQL Server sütun değeri için NULL ekler.
SSPROP_FASTLOADOPTIONS Köşe: Hayır

R/W: Oku/Yaz

Tip: VT_BSTR

Varsayılan: yok

Açıklama: Bu özellik -h "ipucu[,... ile aynıdır n]" BCP yardımcı seçeneği var. Aşağıdaki dize(ler), verilerin toplu olarak bir tabloya kopyalanmasında seçenek(ler) olarak kullanılabilir.

ORDER(column[ASC | DESC][,... n]): Veri dosyasındaki veri sıralaması. Toplu kopyalama performansı, yüklenen veri dosyası tablodaki kümelenmiş indekse göre sıralanırsa daha iyi olur.

ROWS_PER_BATCH = bb: Bir parti başına veri satır sayısı ( bb olarak). Sunucu, bb değerine göre toplu yükü optimize eder. Varsayılan olarak, ROWS_PER_BATCH bilinmiyor.

KILOBYTES_PER_BATCH = cc: Toplu veri sayısı kilobayt (KB) (cc olarak). Varsayılan olarak, KILOBYTES_PER_BATCH bilinmiyor.

TABLOCK: Toplu kopyalama işlemi süresince masa seviyesinde bir kilit elde edilir. Bu seçenek, kilidin sadece toplu kopyalama işlemi süresi boyunca tutulması masadaki kilit çatışmasını azalttığı için performansı önemli ölçüde artırır. Bir tablo, indeks yoksa ve TABLOCK belirtilmişse, birden fazla istemci tarafından eşzamanlı olarak yüklenebilir. Varsayılan olarak, kilitleme davranışı toplu yükteki tablo seçenek tablosu kilidi tarafından belirlenir.

CHECK_CONSTRAINTS: table_name üzerindeki kısıtlamalar toplu kopyalama işlemi sırasında kontrol edilir. Varsayılan olarak, kısıtlamalar göz ardı edilir.

FIRE_TRIGGER: SQL Server, tetikleyiciler için satır sürüm kullanır ve satır sürümlerini tempdb'deki sürüm deposunda saklar. Bu nedenle, tetikleyiciler etkinleştirildiğinde bile toplu kayıt optimizasyonları mevcuttur. Tetikleyiciler etkin olan çok sayıda satır içeren bir partiyi toplu olarak içe aktarmadan önce, tempdb'nin boyutunu genişletmeniz gerekebilir.

Dosya Tabanlı Toplu Kopyalama İşlemlerinin Kullanımı

SQL Server için OLE DB Sürücüsü, SQL Server dosya tabanlı toplu kopyalama işlemlerini desteklemek için IBCPSession arayüzünü uygular. IBCPSession arayüzü, IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt ve IBCPSession::BCPWriteFmt yöntemlerini uygular.

Ayrıca Bkz.

SQL Server Özellikleri için OLE DB Driver
Veri Kaynak Özellikleri (OLE DB)
Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)