Udostępnij za pośrednictwem


bcp_init

Inicjuje operację kopiowanie masowe.

RETCODE bcp_init (
        HDBC hdbc,
        LPCTSTR szTable,
        LPCTSTR szDataFile,
        LPCTSTR szErrorFile,
        INT eDirection);

Argumenty

  • hdbc
    Czy dojścia połączenia ODBC włączona kopia w zbiorczej.

  • szTable
    Jest nazwą tabela bazy danych, które mają być kopiowane do lub.Nazwa ta może również zawierać nazwy bazy danych lub nazwa właściciela.Na przykład Pubs.gracie.titles, Pubstytuły, gracie.titles, and tytuły są wszystkie nazwy tabela prawnych.

    Jeśli eDirection is DB_OUT, szTable można także nazwy widok bazy danych.

    If eDirection is DB_OUT and a SELECT statement is specified using bcp_control before bcp_exec is called, bcp_initszTable must be set to NULL.

  • szDataFile
    Jest nazwą pliku użytkownika mają być kopiowane do lub.Jeśli dane są kopiowane bezpośrednio ze zmiennych za pomocą bcp_sendrow, zestaw szDataFile null.

  • szErrorFile
    Jest nazwą pliku błędu, który ma być wypełnione postęp wiadomości, komunikaty o błędach i kopiuje wszystkie wiersze, które z jakiegoś powodu nie można skopiować z pliku użytkownika do tabela.Jeśli wartość NULL jest przekazywana jako szErrorFile, plik błędu nie jest używany.

  • eDirection
    Wskazuje kierunek kopii DB_IN lub DB_OUT.DB_IN wskazuje kopii z zmiennych programu lub pliku użytkownika do tabela.DB_OUT wskazuje kopiowanie z tabela bazy danych do plików użytkownika.Należy określić nazwę pliku użytkownika z DB_OUT.

Zwraca wartość

Powiodła się lub zakończyć się NIEPOWODZENIEM.

Remarks

Call bcp_init before calling any other bulk-copy function.bcp_init performs the necessary initializations for a bulk copy of data between the workstation and SQL Server.

The bcp_init funkcja must be provided with an ODBC connection handle enabled for use with kopiowanie masowe functions.Aby włączyć dojście, należy użyć SQLzestawConnectAttr z SQL_COPT_SS_BCP zestaw do SQL_BCP_ON na dojście do połączenia przydzielonego, ale nie połączono.Próba przypisać atrybut połączony uchwyt powoduje błąd.

When a data file is specified, bcp_init examines the structure of the database source or target table, not the data file.bcp_init specifies data format values for the data file based on each column in the database table, view, or SELECT result set.This specification includes the data type of each column, the presence or absence of a length or null indicator and terminator byte strings in the data, and the width of fixed-length data types.bcp_init sets these values as follows:

  • Określony typ danych jest typ danych kolumna w tabela bazy danych, widok lub zestaw wyników SELECT.Typ danych jest wyliczane przez SQL Server macierzyste typy danych określonych w sqlncli.h. Dane jest reprezentowany w postaci komputera.Oznacza to, dane z kolumna Liczba całkowita typ danych jest reprezentowane przez sekwencję czwartego bajtu duży- lub little-endian opartych na komputerze, na którym utworzono plik danych.

  • Jeśli typ danych bazy danych jest stała długość, plik danych również jest stała długość.Funkcje masowego kopiowania, które przetwarzają dane (na przykład bcp_exec) analizuje Oczekiwana długość danych w pliku danych jest taka sama, jak długość danych określonych w tabela bazy danych, widoku lub liście kolumn SELECT wierszy danych.Na przykład dane dla kolumna w bazie danych określone jako CHAR(13) musi być reprezentowana przez 13 znaków dla każdego wiersza danych w pliku.Dane o stałej długości, może poprzedzać prefiksem wskaźnik null, jeśli zezwala na wartości null kolumna bazy danych.

  • Po zdefiniowaniu terminator bajtowa sekwencja długości sekwencji terminator bajt jest równy 0.

  • W przypadku kopiowania danych do SQL Server, plik danych musi mieć dane dla każdej kolumna w tabela bazy danych. Podczas kopiowania z SQL Server, dane ze wszystkich kolumn w tabela bazy danych, widok lub zestaw wyników SELECT są kopiowane do pliku danych.

  • W przypadku kopiowania danych do SQL Server, liczba porządkowa położenie kolumna w pliku danych musi być taki sam, jak liczba porządkowa pozycję kolumna w tabela bazy danych. Podczas kopiowania z SQL Server, bcp_exec umieszcza dane w zależności od porządkowa pozycję kolumna w tabela bazy danych.

  • Jeśli typ danych bazy danych jest zmiennej długości (na przykład varbinary(22)) lub jeśli kolumna bazy danych może zawierać wartości null, dane w pliku danych jest poprzedzona za pomocą wskaźnika długość/null.Szerokość wskaźnika zależy od typu danych i wersja kopiowanie masowe.

Aby zmienić wartości format danych określony dla pliku danych, należy skontaktować się telefonicznie bcp_columns and bcp_colfmt.

Kopii zbiorczego SQL Server może zostać zoptymalizowana dla tabel, które nie zawierają indeksy przez ustawienie SIMPLE lub BULK_LOGGED modelu odzyskiwanie bazy danych. Aby uzyskać więcej informacji zobacz Optimizing Bulk Import Performance i ZMIENIANIE BAZY DANYCH.

Jeśli plik danych nie jest używany, należy wywołać bcp_bind , aby określić format i lokalizacji w pamięci fsor danych każdej kolumna, a następnie kopiowanie wierszy danych do SQL Server za pomocą bcp_sendrow.

Przykład

W przykładzie pokazano, jak używać funkcja bcp_init ODBC z pliku w formacie.

Przed skompilować i uruchomić kod języka C++, należy wykonać następujące czynności:

  • Utwórz urządzenie źródłowe danych ODBC o nazwie test.To urządzenie źródłowe danych można skojarzyć z każdej innej bazy danych.

  • Uruchom następujące Transact-SQL w bazie danych:

    CREATE TABLE BCPDate (cola int, colb datetime)
    
  • W katalogu, w którym Uruchom aplikację Dodaj plik o nazwie Bcpfmt.fmt i dodać ten plik.

    8.0
    2
    1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin
    2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_Bin
    
  • W katalogu, w którym Uruchom aplikację Dodaj plik o nazwie Bcpodbc.bcp i dodać ten plik.

    1
    2
    

Teraz można przystąpić do kompilowania i uruchamiania kodu C++.

// compile with: odbc32.lib sqlncli10.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*)"Test", 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);
}

Historia zmian

Microsoft Learning

Zaktualizowane próbki.

See Also

Reference