bcp_exec

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Kör en fullständig bulkkopia av data mellan en databastabell och en användarfil.

Syntax

  
RETCODE bcp_exec (  
        HDBC hdbc,  
        LPDBINT pnRowsProcessed);  

Arguments

hdbc
Är den masskopieringsaktiverade ODBC-anslutningshandtaget.

pnRowsProcessed
Är en pekare till en DBINT. Funktionen bcp_exec fyller denna DBINT med antalet rader som kopierats framgångsrikt. Om pnRowsProcessed är NULL, ignoreras det av bcp_exec.

Returns

LYCKAS, SUCCEED_ASYNC ELLER MISSLYCKAS. Funktionen bcp_exec returnerar SUCCEED om alla rader kopieras. bcp_exec returnerar SUCCEED_ASYNC om en asynkron bulkkopieringsoperation fortfarande är utestående. bcp_exec returnerar FAIL om ett fullständigt fel inträffar, eller om antalet rader som genererar fel når det värde som anges för BCPMAXERRS som använder bcp_control. BCPMAXERRS är standard 10. BCPMAXERRS-alternativet påverkar endast de syntaxfel som leverantören upptäcker när raderna från datafilen läses (och inte raderna som skickas till servern). Servern avbryter batchen när den upptäcker ett fel med en rad. Kontrollera parametern pnRowsProcessed för antalet rader som kopierats framgångsrikt.

Remarks

Denna funktion kopierar data från en användarfil till en databastabell eller tvärtom, beroende på värdet på eDirection-parametern i bcp_init.

Innan du ringer bcp_exec, ring bcp_init med ett giltigt användarfilnamn. Om du inte gör det resulterar det i ett fel.

bcp_exec är den enda bulkkopieringsfunktionen som sannolikt kommer att vara obesvarad under någon längre tid. Det är därför den enda bulk-kopieringsfunktionen som stödjer asynkront läge. För att ställa in asynkront läge, använd SQLSetConnectAttr för att ställa in SQL_ATTR_ASYNC_ENABLE till SQL_ASYNC_ENABLE_ON innan du anropar bcp_exec. För att testa slutförande, anropa bcp_exec med samma parametrar. Om masskopian ännu inte är klar returnerar bcp_exec SUCCEED_ASYNC. Den returnerar också i pnRowsProcessed en statusräkning av antalet rader som har skickats till servern. Rader som skickas till servern är inte committed förrän slutet av en batch har nåtts.

För information om en brytande förändring i bulkkopiering som började i SQL Server 2005 (9.x), se Performing Bulk Copy Operations (ODBC).

Example

Följande exempel visar hur man använder 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.