bcp_exec

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Wykonuje pełną kopię zbiorczą danych pomiędzy tabelą bazy danych a plikiem użytkownika.

Syntax

  
RETCODE bcp_exec (  
        HDBC hdbc,  
        LPDBINT pnRowsProcessed);  

Arguments

hdbc
Czy obsługa połączenia ODBC z obsługą kopiowania zbiorczego.

pnRowsProcessed
Jest wskazówką do DBINT. Funkcja bcp_exec wypełnia ten DBINT liczbą wierszy pomyślnie skopiowanych. Jeśli pnRowsProcessed jest NULL, jest ignorowany przez bcp_exec.

Zwroty

SUKCES, SUCCEED_ASYNC ALBO PORAŻKA. Funkcja bcp_exec zwraca SUKCES, jeśli wszystkie wiersze zostaną skopiowane. bcp_exec zwraca SUCCEED_ASYNC jeśli operacja kopiowania masowego asynchronicznego nadal jest w toku. bcp_exec zwraca FAIL, jeśli wystąpi całkowita awaria lub jeśli liczba wierszy generujących błędy osiągnie wartość określoną dla BCPMAXERR używających bcp_control. BCPMAXERRS domyślnie ustawia się na 10. Opcja BCPMAXERRS wpływa tylko na błędy składniowe wykryte przez dostawcę podczas odczytu wierszy z pliku danych (a nie na wiersze wysyłane do serwera). Server przerywa partię, gdy wykryje błąd z wierszem. Sprawdź parametr pnRowsProcessed dla liczby poprawnie skopiowanych wierszy.

Remarks

Funkcja ta kopiuje dane z pliku użytkownika do tabeli bazy danych lub odwrotnie, w zależności od wartości parametru eDirection w bcp_init.

Przed wywołaniem bcp_exec zadzwoń bcp_init z poprawną nazwą pliku użytkownika. Niepowodzenie w tym celu powoduje wystąpienie błędu.

bcp_exec jest jedyną funkcją kopiowania masowego, która prawdopodobnie będzie nieczynna przez dłuższy czas. Jest to zatem jedyna funkcja kopiowania masowego obsługująca tryb asynchroniczny. Aby ustawić tryb asynchroniczny, użyj SQLSetConnectAttr , aby ustawić SQL_ATTR_ASYNC_ENABLE na SQL_ASYNC_ENABLE_ON przed wywołaniem bcp_exec. Aby sprawdzić ukończenie, wywołaj bcp_exec z tymi samymi parametrami. Jeśli kopia zbiorcza nie została jeszcze ukończona, bcp_exec zwraca SUCCEED_ASYNC. Zwraca także w pnRowsProcessed liczbę statusów wierszy przesłanych na serwer. Wiersze wysyłane na serwer nie są zatwierdzane, dopóki partia nie zostanie zakończona.

Informacje o przełomowej zmianie w kopiowaniu masowym rozpoczynającej się w SQL Server 2005 (9.x) można znaleźć w artykule Wykonywanie operacji kopiowania masowego (ODBC).

Example

Poniższy przykład pokazuje, jak używać bcp_exec:

// Variables like henv not specified.  
HDBC      hdbc;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, _T("pubs..authors"), _T("authors.sav"), NULL, DB_OUT)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Now, execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   if (nRowsProcessed == -1)  
      {  
      printf_s("No rows processed on bulk copy execution.\n");  
      }  
   else  
      {  
      printf_s("Incomplete bulk copy.   Only %ld row%s copied.\n",  
         nRowsProcessed, (nRowsProcessed == 1) ? "": "s");  
      }  
   return;  
   }  
  
printf_s("%ld rows processed.\n", nRowsProcessed);  
  
// Carry on.