Bagikan melalui


Salin Massal dengan Menggunakan File Format (ODBC)

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Sampel ini menunjukkan cara menggunakan fungsi odbc bcp_init dengan file format.

Untuk menyalin secara massal dengan menggunakan file format

  1. Alokasikan handel lingkungan dan handel koneksi.

  2. Atur SQL_COPT_SS_BCP dan SQL_BCP_ON untuk mengaktifkan operasi penyalinan massal.

  3. Sambungkan ke SQL Server.

  4. Panggil bcp_init untuk mengatur informasi berikut:

    • Nama tabel atau tampilan untuk disalin secara massal dari atau ke.

    • Nama file data yang berisi data untuk disalin ke database atau yang menerima data saat menyalin dari database.

    • Nama file data untuk menerima pesan kesalahan salin massal (tentukan NULL jika Anda tidak menginginkan file pesan).

    • Arah salinan: DB_IN dari file ke tabel atau tampilan.

  5. Panggil bcp_readfmt untuk membaca file format yang menjelaskan file data yang akan digunakan oleh operasi penyalinan massal.

  6. Panggil bcp_exec untuk menjalankan operasi penyalinan massal.

Contoh

Sampel ini tidak didukung pada IA64.

Anda akan memerlukan sumber data ODBC yang disebut AdventureWorks, yang database defaultnya adalah database sampel AdventureWorks. (Anda dapat mengunduh database sampel AdventureWorks dari Halaman beranda Sampel microsoft SQL Server dan Proyek Komunitas.) Sumber data ini harus didasarkan pada driver ODBC yang disediakan oleh sistem operasi (nama drivernya adalah "SQL Server"). Jika Anda akan membangun dan menjalankan sampel ini sebagai aplikasi 32-bit pada sistem operasi 64-bit, Anda harus membuat sumber data ODBC dengan Administrator ODBC di %windir%\SysWOW64\odbcad32.exe.

Sampel ini tersambung ke instans SQL Server default komputer Anda. Untuk menyambungkan ke instans bernama, ubah definisi sumber data ODBC untuk menentukan instans menggunakan format berikut: server\namedinstance. Secara default, SQL Server Express menginstal ke instans bernama.

Jalankan daftar kode pertama (Transact-SQL) untuk membuat tabel yang akan digunakan sampel.

Salin daftar kode kedua dan tempelkan ke dalam file bernama Bcpfmt.fmt. Setiap kolom dalam tabel dipisahkan oleh karakter tab.

Salin daftar kode ketiga dan tempelkan ke dalam file bernama Bcpodbc.bcp. Karakter tab mendahului setiap pengembalian pengangkutan dalam file.

Kompilasi daftar kode keempat (C++) dengan odbc32.lib dan odbcbcp.lib. Jika Anda membangun dengan MSBuild.exe, salin Bcpfmt.fmt dan Bcpodbc.bcp dari direktori proyek ke direktori dengan .exe lalu panggil .exe.

Jalankan daftar kode kelima (Transact-SQL) untuk menghapus tabel yang digunakan sampel.

USE AdventureWorks2022;
CREATE TABLE BCPDate (cola int, colb datetime)  
8.0  
2  
1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin  
2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_Bin  
1  
2  
  
// compile with: odbc32.lib odbcbcp.lib  
#include <stdio.h>  
#include <windows.h>  
#include <sql.h>  
#include <sqlext.h>  
#include <odbcss.h>  
  
SQLHENV henv = SQL_NULL_HENV;  
HDBC hdbc1 = SQL_NULL_HDBC;   
  
void Cleanup() {  
   if (hdbc1 != SQL_NULL_HDBC) {  
      SQLDisconnect(hdbc1);  
      SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);  
   }  
  
   if (henv != SQL_NULL_HENV)  
      SQLFreeHandle(SQL_HANDLE_ENV, henv);  
}  
  
int main() {  
   RETCODE retcode;  
   SDWORD cRows;  
  
   // Allocate the ODBC environment and save handle.  
   retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLAllocHandle(Env) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Notify ODBC that this is an ODBC 3.0 app.  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLSetEnvAttr(ODBC version) Failed\n\n");  
      Cleanup();  
      return(9);      
   }  
  
   // Allocate ODBC connection handle, set BCP mode, and connect.  
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLAllocHandle(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   retcode = SQLSetConnectAttr(hdbc1, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLSetConnectAttr(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Sample uses Integrated Security. Create SQL Server DSN using Windows NT authentication.  
   retcode = SQLConnect(hdbc1, (UCHAR*)"AdventureWorks", SQL_NTS, (UCHAR*)"", SQL_NTS, (UCHAR*)"", SQL_NTS);  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("SQLConnect() Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Initialize the bulk copy.  
   retcode = bcp_init(hdbc1, "BCPDate", "BCPODBC.bcp", NULL, DB_IN);  
   if ( (retcode != SUCCEED) ) {  
      printf("bcp_init(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Read the format file.  
   retcode = bcp_readfmt(hdbc1, "BCPFMT.fmt");  
   if ( (retcode != SUCCEED) ) {  
      printf("bcp_readfmt(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Execute the bulk copy.  
   retcode = bcp_exec(hdbc1, &cRows);  
   if ( (retcode != SUCCEED) ) {  
      printf("bcp_exec(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   printf("Number of rows bulk copied in = %d.\n", cRows);  
  
   // Cleanup  
   SQLDisconnect(hdbc1);  
   SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);  
   SQLFreeHandle(SQL_HANDLE_ENV, henv);  
}  
USE AdventureWorks2022;
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'BCPDate')  
     DROP TABLE BCPDate  
GO  

Lihat Juga

Penyalinan Massal dengan Topik Cara Penggunaan Driver ODBC SQL Server (ODBC)
Menggunakan File Data dan Format File