Bagikan melalui


Penyalinan Massal dari Variabel Program

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

Anda dapat menyalin secara massal langsung dari variabel program. Setelah mengalokasikan variabel untuk menyimpan data untuk baris dan memanggil bcp_init untuk memulai salinan massal, panggil bcp_bind untuk setiap kolom untuk menentukan lokasi dan format variabel program yang akan dikaitkan dengan kolom. Isi setiap variabel dengan data, lalu panggil bcp_sendrow untuk mengirim satu baris data ke server. Ulangi proses mengisi variabel dan memanggil bcp_sendrow hingga semua baris dikirim ke server, lalu panggil bcp_done untuk menentukan bahwa operasi selesai.

Parameter pData bcp_bindberisi alamat variabel yang terikat ke kolom. Data untuk setiap kolom dapat disimpan dengan salah satu dari dua cara:

  • Alokasikan satu variabel untuk menyimpan data.

  • Alokasikan variabel indikator diikuti segera oleh variabel data.

Variabel indikator menunjukkan panjang data untuk kolom panjang variabel, dan juga menunjukkan nilai NULL jika kolom mengizinkan NULL. Jika hanya variabel data yang digunakan, maka alamat variabel ini disimpan dalam parameter pData bcp_bind. Jika variabel indikator digunakan, alamat variabel indikator disimpan dalam parameter pData bcp_bind. Fungsi penyalinan massal menghitung lokasi variabel data dengan menambahkan parameter cbIndicator dan pData bcp_bind.

bcp_bind mendukung tiga metode untuk menangani data dengan panjang variabel:

  • Gunakan cbData hanya dengan variabel data. Tempatkan panjang data di cbData. Setiap kali panjang data disalin secara massal, panggil bcp_collen untuk mengatur ulang cbData. Jika salah satu dari dua metode lainnya sedang digunakan, tentukan SQL_VARLEN_DATA untuk cbData. Jika semua nilai data yang disediakan untuk kolom adalah NULL, tentukan SQL_NULL_DATA untuk cbData.

  • Gunakan variabel indikator. Saat setiap nilai data baru dipindahkan ke dalam variabel data, simpan panjang nilai dalam variabel indikator. Jika salah satu dari dua metode lainnya sedang digunakan, tentukan 0 untuk cbIndicator.

  • Gunakan penunjuk terminator. Muat parameter pTerm bcp_binddengan alamat pola bit yang mengakhiri data. Jika salah satu dari dua metode lainnya sedang digunakan, tentukan NULL untuk pTerm.

Ketiga metode ini dapat digunakan pada panggilan bcp_bind yang sama, dalam hal ini spesifikasi yang menghasilkan jumlah data terkecil yang disalin digunakan.

Parameter jenis bcp_bindmenggunakan pengidentifikasi jenis data Pustaka DB, bukan pengidentifikasi jenis data ODBC. Pengidentifikasi jenis data Pustaka DB didefinisikan dalam sqlncli.h untuk digunakan dengan fungsi bcp_bind ODBC.

Fungsi penyalinan massal tidak mendukung semua jenis data ODBC C. Misalnya, fungsi salinan massal tidak mendukung struktur SQL_C_TYPE_TIMESTAMP ODBC, jadi gunakan SQLBindCol atau SQLGetData untuk mengonversi data odbc SQL_TYPE_TIMESTAMP ke variabel SQL_C_CHAR. Jika Anda kemudian menggunakan bcp_bind dengan parameter jenis SQLCHARACTER untuk mengikat variabel ke kolom tanggalwaktu SQL Server, fungsi salinan massal mengonversi klausa escape tanda waktu dalam variabel karakter ke format tanggalwaktu yang tepat.

Tabel berikut mencantumkan tipe data yang direkomendasikan untuk digunakan dalam pemetaan dari tipe data ODBC SQL ke jenis data SQL Server.

Jenis ODBC SQLdata Tipe data ODBC C parameter jenis bcp_bind Tipe data SQL Server
SQL_CHAR SQL_C_CHAR SQLCHARACTER Karakter

Char
SQL_VARCHAR SQL_C_CHAR SQLCHARACTER varchar

karakter bervariasi

karakter bervariasi

nama sysname
SQL_LONGVARCHAR SQL_C_CHAR SQLCHARACTER text
SQL_WCHAR SQL_C_WCHAR SQLNCHAR nchar
SQL_WVARCHAR SQL_C_WCHAR SQLNVARCHAR nvarchar
SQL_WLONGVARCHAR SQL_C_WCHAR SQLNTEXT ntext
SQL_DECIMAL SQL_C_CHAR SQLCHARACTER desimal

Dec

Uang

smallmoney
SQL_NUMERIC SQL_C_NUMERIC SQLNUMERICN numerik
SQL_BIT SQL_C_BIT SQLBIT bit
SQL_TINYINT (ditandatangani) SQL_C_SSHORT SQLINT2 smallint
SQL_TINYINT (tidak ditandatangani) SQL_C_UTINYINT SQLINT1 kecil
SQL_SMALL_INT (ditandatangani) SQL_C_SSHORT SQLINT2 smallint
SQL_SMALL_INT (tidak ditandatangani) SQL_C_SLONG SQLINT4 int

Integer
SQL_INTEGER (ditandatangani) SQL_C_SLONG SQLINT4 int

Integer
SQL_INTEGER (tidak ditandatangani) SQL_C_CHAR SQLCHARACTER desimal

Dec
SQL_BIGINT (ditandatangani dan tidak ditandatangani) SQL_C_CHAR SQLCHARACTER bigint
SQL_REAL SQL_C_FLOAT SQLFLT4 real
SQL_FLOAT SQL_C_DOUBLE SQLFLT8 float
SQL_DOUBLE SQL_C_DOUBLE SQLFLT8 float
SQL_BINARY SQL_C_BINARY SQLBINARY biner

timestamp
SQL_VARBINARY SQL_C_BINARY SQLBINARY varbinary

biner bervariasi
SQL_LONGVARBINARY SQL_C_BINARY SQLBINARY gambar
SQL_TYPE_DATE SQL_C_CHAR SQLCHARACTER datetime

smalldatetime
SQL_TYPE_TIME SQL_C_CHAR SQLCHARACTER datetime

smalldatetime
SQL_TYPE_TIMESTAMP SQL_C_CHAR SQLCHARACTER datetime

smalldatetime
SQL_GUID SQL_C_GUID SQLUNIQUEID pengidentifikasi unik
SQL_INTERVAL_ SQL_C_CHAR SQLCHARACTER Char

SQL Server tidak memiliki tipe data int tinyint, unsigned smallint, atau unsigned. Untuk mencegah hilangnya nilai data saat memigrasikan jenis data ini, buat tabel SQL Server dengan jenis data bilangan bulat terbesar berikutnya. Untuk mencegah pengguna menambahkan nilai di luar rentang yang diizinkan oleh jenis data asli, terapkan aturan ke kolom SQL Server untuk membatasi nilai yang diizinkan ke rentang yang didukung oleh jenis data di sumber asli:

CREATE TABLE Sample_Ints(STinyIntCol   SMALLINT,  
USmallIntCol INT)  
GO  
CREATE RULE STinyInt_Rule  
AS   
@range >= -128 AND @range <= 127  
GO  
CREATE RULE USmallInt_Rule  
AS   
@range >= 0 AND @range <= 65535  
GO  
sp_bindrule STinyInt_Rule, 'Sample_Ints.STinyIntCol'  
GO  
sp_bindrule USmallInt_Rule, 'Sample_Ints.USmallIntCol'  
GO  

SQL Server tidak mendukung jenis data interval secara langsung. Namun, aplikasi dapat menyimpan urutan escape interval sebagai string karakter dalam kolom karakter SQL Server. Aplikasi dapat membacanya untuk digunakan nanti, tetapi tidak dapat digunakan dalam pernyataan Transact-SQL.

Fungsi penyalinan massal dapat digunakan untuk memuat data dengan cepat ke SQL Server yang telah dibaca dari sumber data ODBC. Gunakan SQLBindCol untuk mengikat kolom hasil yang diatur ke variabel program, lalu gunakan bcp_bind untuk mengikat variabel program yang sama ke operasi penyalinan massal. Memanggil SQLFetchScroll atau SQLFetch kemudian mengambil baris data dari sumber data ODBC ke dalam variabel program, dan memanggil bcp_sendrow menyalin data secara massal dari variabel program ke SQL Server .

Aplikasi dapat menggunakan fungsi bcp_colptr kapan saja perlu mengubah alamat variabel data yang awalnya ditentukan dalam parameter pData bcp_bind. Aplikasi dapat menggunakan fungsi bcp_collen kapan saja perlu mengubah panjang data yang awalnya ditentukan dalam parameter cbData bcp_bind.

Anda tidak dapat membaca data dari SQL Server ke dalam variabel program menggunakan salinan massal; tidak ada yang seperti fungsi "bcp_readrow". Anda hanya dapat mengirim data dari aplikasi ke server.

Lihat Juga

Melakukan Operasi Salin Massal (ODBC)