Melakukan Operasi Salin Massal

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Unduh driver OLE DB

Fitur penyalinan massal SQL Server mendukung transfer data dalam jumlah besar ke atau keluar dari tabel atau tampilan SQL Server. Data juga dapat ditransfer keluar dengan menentukan pernyataan SELECT. Data dapat dipindahkan antara SQL Server dan file data sistem operasi, seperti file ASCII. File data dapat memiliki format yang berbeda; format didefinisikan untuk menyalin secara massal dalam file format. Secara opsional, data dapat dimuat ke dalam variabel program dan ditransfer ke SQL Server menggunakan fungsi dan metode penyalinan massal.

Untuk aplikasi sampel yang menunjukkan fitur ini, lihat Menyalin Data Secara Massal Menggunakan IRowsetFastLoad (OLE DB).

Aplikasi biasanya menggunakan salinan massal dengan salah satu cara berikut:

  • Salin massal dari tabel, tampilan, atau kumpulan hasil pernyataan Transact-SQL ke dalam file data tempat data disimpan dalam format yang sama dengan tabel atau tampilan.

    Ini disebut file data mode asli.

  • Salin massal dari tabel, tampilan, atau kumpulan hasil pernyataan Transact-SQL ke dalam file data tempat data disimpan dalam format selain salah satu tabel atau tampilan.

    Dalam hal ini, file format terpisah dibuat yang menentukan karakteristik (jenis data, posisi, panjang, terminator, dan sebagainya) dari setiap kolom seperti yang disimpan dalam file data. Jika semua kolom dikonversi ke format karakter, file yang dihasilkan disebut file data mode karakter.

  • Salin massal dari file data ke dalam tabel atau tampilan.

    Jika diperlukan, file format digunakan untuk menentukan tata letak file data.

  • Muat data ke dalam variabel program, lalu impor data ke dalam tabel atau tampilan menggunakan fungsi salin massal untuk penyalinan massal berturut-turut pada satu waktu.

File data yang digunakan oleh fungsi salinan massal tidak harus dibuat oleh program penyalinan massal lainnya. Sistem lain dapat menghasilkan file data dan file format sesuai dengan definisi penyalinan massal; file-file ini kemudian dapat digunakan dengan program penyalinan massal SQL Server untuk mengimpor data ke SQL Server. Misalnya, Anda dapat mengekspor data dari spreadsheet dalam file yang dibatasi tab, membangun file format yang menjelaskan file yang dibatasi tab, lalu menggunakan program penyalinan massal untuk mengimpor data dengan cepat ke SQL Server. File data yang dihasilkan oleh salinan massal juga dapat diimpor ke aplikasi lain. Misalnya, Anda dapat menggunakan fungsi penyalinan massal untuk mengekspor data dari tabel atau melihat ke dalam file yang dibatasi tab yang kemudian dapat dimuat ke dalam spreadsheet.

Aplikasi pengkodian pemrogram untuk menggunakan fungsi salinan massal harus mengikuti aturan umum untuk performa penyalinan massal yang baik. Untuk informasi selengkapnya tentang dukungan untuk operasi penyalinan massal di SQL Server, lihat Impor dan Ekspor Data Massal (SQL Server).

Batasan dan Pembatasan

Jenis yang ditentukan pengguna (UDT) CLR harus terikat sebagai data biner. Bahkan jika file format menentukan SQLCHAR sebagai jenis data untuk kolom UDT target, utilitas BCP akan memperlakukan data sebagai biner.

Jangan gunakan SET FMTONLY OFF dengan operasi penyalinan massal. SET FMTONLY OFF dapat menyebabkan operasi penyalinan massal Anda gagal atau memberikan hasil yang tidak terduga.

Menggunakan ADO dengan Driver OLE DB untuk SQL Server

Driver OLE DB untuk SQL Server menerapkan dua metode untuk melakukan operasi penyalinan massal dengan database SQL Server. Metode pertama melibatkan penggunaan antarmuka IRowsetFastLoad untuk operasi penyalinan massal berbasis memori; dan yang kedua melibatkan penggunaan antarmuka IBCPSession untuk operasi penyalinan massal berbasis file.

Menggunakan Operasi Salin Massal Berbasis Memori

Driver OLE DB untuk SQL Server mengimplementasikan antarmuka IRowsetFastLoad untuk mengekspos dukungan untuk operasi penyalinan massal berbasis memori SQL Server. Antarmuka IRowsetFastLoad mengimplementasikan metode IRowsetFastLoad::Commit dan IRowsetFastLoad::InsertRow.

Mengaktifkan Sesi untuk IRowsetFastLoad

Konsumen memberi tahu Driver OLE DB untuk SQL Server tentang kebutuhannya akan salinan massal dengan mengatur Driver OLE DB untuk properti sumber data khusus SQL Server SSPROP_ENABLEFASTLOAD ke VARIANT_TRUE. Dengan properti yang diatur pada sumber data, konsumen membuat Driver OLE DB untuk sesi SQL Server. Sesi baru memungkinkan akses konsumen ke antarmuka IRowsetFastLoad .

Catatan

Jika antarmuka IDataInitialize digunakan untuk menginisialisasi sumber data, maka perlu untuk mengatur properti SSPROP_IRowsetFastLoad dalam parameter rgPropertySets dari metode IOpenRowset::OpenRowset; jika tidak, panggilan ke metode OpenRowset akan mengembalikan E_NOINTERFACE.

Mengaktifkan sesi untuk salinan massal membatasi Driver OLE DB untuk dukungan SQL Server untuk antarmuka pada sesi. Sesi yang mendukung penyalinan massal hanya mengekspos antarmuka berikut:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Untuk menonaktifkan pembuatan himpunan baris yang mendukung penyalinan massal dan menyebabkan Driver OLE DB untuk sesi SQL Server kembali ke pemrosesan standar, atur ulang SSPROP_ENABLEFASTLOAD ke VARIANT_FALSE.

IRowsetFastLoad Rowsets

Set baris salinan massal Driver OLE DB untuk SQL Server hanya menulis, tetapi mengekspos antarmuka yang memungkinkan konsumen menentukan struktur tabel SQL Server. Antarmuka berikut diekspos pada Driver OLE DB berkemampuan penyalinan massal untuk set baris SQL Server:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Properti khusus penyedia SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS, dan SSPROP_FASTLOADKEEPIDENTITY perilaku kontrol Driver OLE DB untuk set baris salinan massal SQL Server. Properti ditentukan dalam anggota rgProperties dari anggota parameter iOpenRowset rgPropertySets.

ID Properti Deskripsi
SSPROP_FASTLOADKEEPIDENTITY Kolom: Tidak

R/W: Baca/tulis

Jenis: VT_BOOL

Default: VARIANT_FALSE

Deskripsi: Mempertahankan nilai identitas yang disediakan oleh konsumen.

VARIANT_FALSE: Nilai untuk kolom identitas dalam tabel SQL Server dihasilkan oleh SQL Server. Nilai apa pun yang terikat untuk kolom diabaikan oleh Driver OLE DB untuk SQL Server.

VARIANT_TRUE: Konsumen mengikat aksesor yang memberikan nilai untuk kolom identitas SQL Server. Properti identitas tidak tersedia pada kolom yang menerima NULL, sehingga konsumen memberikan nilai unik pada setiap IRowsetFastLoad::Sisipkan panggilan.
SSPROP_FASTLOADKEEPNULLS Kolom: Tidak

R/W: Baca/tulis

Jenis: VT_BOOL

Default: VARIANT_FALSE

Deskripsi: Mempertahankan NULL untuk kolom dengan batasan DEFAULT. Hanya memengaruhi kolom SQL Server yang menerima NULL dan memiliki batasan DEFAULT yang diterapkan.

VARIANT_FALSE: SQL Server menyisipkan nilai default untuk kolom ketika Driver OLE DB untuk konsumen SQL Server menyisipkan baris yang berisi NULL untuk kolom.

VARIANT_TRUE: SQL Server menyisipkan NULL untuk nilai kolom ketika Driver OLE DB untuk konsumen SQL Server menyisipkan baris yang berisi NULL untuk kolom.
SSPROP_FASTLOADOPTIONS Kolom: Tidak

R/W: Baca/tulis

Jenis: VT_BSTR

Default: tidak ada

Deskripsi: Properti ini sama dengan -h "hint[,...n]" dari utilitas bcp . String berikut dapat digunakan sebagai opsi dalam penyalinan data secara massal ke dalam tabel.

ORDER(column[ASC | DESC][,...n]): Urutkan urutan data dalam file data. Performa penyalinan massal ditingkatkan jika file data yang dimuat diurutkan sesuai dengan indeks berkluster pada tabel.

= ROWS_PER_BATCH bb: Jumlah baris data per batch (sebagai bb). Server mengoptimalkan beban massal sesuai dengan nilai bb. Secara default, ROWS_PER_BATCH tidak diketahui.

= KILOBYTES_PER_BATCH cc: Jumlah kilobyte (KB) data per batch (sebagai cc). Secara default, KILOBYTES_PER_BATCH tidak diketahui.

TABLOCK: Kunci tingkat tabel diperoleh selama durasi operasi penyalinan massal. Opsi ini secara signifikan meningkatkan performa karena memegang kunci hanya selama durasi operasi penyalinan massal mengurangi pertikaian kunci pada tabel. Tabel dapat dimuat oleh beberapa klien secara bersamaan jika tabel tidak memiliki indeks dan TABLOCK ditentukan. Secara default, perilaku penguncian ditentukan oleh kunci tabel opsi tabel pada beban massal.

CHECK_CONSTRAINTS: Setiap batasan pada table_name diperiksa selama operasi penyalinan massal. Secara default, batasan diabaikan.

FIRE_TRIGGER: SQL Server menggunakan penerapan versi baris untuk pemicu dan menyimpan versi baris di penyimpanan versi di tempdb. Oleh karena itu, pengoptimalan pengelogan massal tersedia bahkan ketika pemicu diaktifkan. Sebelum mengimpor batch secara massal dengan sejumlah besar baris dengan pemicu diaktifkan, Anda mungkin perlu memperluas ukuran tempdb.

Menggunakan Operasi Salin Massal Berbasis File

Driver OLE DB untuk SQL Server mengimplementasikan antarmuka IBCPSession untuk mengekspos dukungan untuk operasi salinan massal berbasis file SQL Server. Antarmuka IBCPSession mengimplementasikan IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt, dan metode IBCPSession::BCPWriteFmt .

Lihat Juga

Driver OLE DB untuk Fitur SQL Server
Properti Sumber Data (OLE DB)
Impor dan Ekspor Data Massal (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)