Melakukan Operasi Salin Massal di SQL Server Native Client

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

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak disarankan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

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.

Penyedia OLE DB Klien Asli SQL Server

Penyedia SQL Server Native Client OLE DB 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

Penyedia SQL Server Native Client OLE DB 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 penyedia SQL Server Native Client OLE DB tentang kebutuhannya akan salinan massal dengan mengatur properti sumber data khusus penyedia SQL Server Native Client OLE DB SSPROP_ENABLEFASTLOAD ke VARIANT_TRUE. Dengan properti yang diatur pada sumber data, konsumen membuat sesi penyedia SQL Server Native Client OLE DB. 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 dukungan penyedia SQL Server Native Client OLE DB 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 sesi penyedia SQL Server Native Client OLE DB kembali ke pemrosesan standar, atur ulang SSPROP_ENABLEFASTLOAD ke VARIANT_FALSE.

IRowsetFastLoad Rowsets

Kumpulan baris salinan massal penyedia SQL Server Native Client OLE DB hanya menulis, tetapi mengekspos antarmuka yang memungkinkan konsumen menentukan struktur tabel SQL Server. Antarmuka berikut diekspos pada set baris penyedia SQL Server Native Client OLE DB berkemampuan salinan massal:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Properti khusus penyedia SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS, dan SSPROP_FASTLOADKEEPIDENTITY mengontrol perilaku set baris salinan massal penyedia SQL Server Native Client OLE DB. Properti ditentukan dalam anggota rgProperties dari anggota parameter iOpenRowsetrgPropertySets.

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 penyedia SQL Server Native Client OLE DB.

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 saat konsumen penyedia SQL Server Native Client OLE DB menyisipkan baris yang berisi NULL untuk kolom.

VARIANT_TRUE: SQL Server menyisipkan NULL untuk nilai kolom saat konsumen penyedia SQL Server Native Client OLE DB 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

Penyedia SQL Server Native Client OLE DB mengimplementasikan antarmuka IBCPSession untuk mengekspos dukungan untuk operasi penyalinan 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 .

Driver ODBC Klien Asli SQL Server

Driver ODBC SQL Server Native Client mempertahankan dukungan yang sama untuk operasi penyalinan massal yang merupakan bagian dari versi driver ODBC SQL Server sebelumnya. Untuk informasi tentang operasi penyalinan massal menggunakan driver ODBC Klien Asli SQL Server, lihat Melakukan Operasi Salin Massal (ODBC).

Lihat Juga

Fitur Klien Asli SQL Server
Properti Sumber Data (OLE DB)
Impor dan Ekspor Data Massal (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Mengoptimalkan Performa Impor Massal