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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk