bcp_exec

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Voert een volledige bulkkopie van data uit tussen een databasetabel en een gebruikersbestand.

Syntax

  
RETCODE bcp_exec (  
        HDBC hdbc,  
        LPDBINT pnRowsProcessed);  

Arguments

hdbc-
Is de ODBC-verbindingshandgreep waarvoor bulksgewijs kopiëren is ingeschakeld.

pnRowsProcessed
Is een verwijzing naar een DBINT. De bcp_exec-functie vult deze DBINT met het aantal succesvol gekopieerde rijen. Als pnRowsProcessed NULL is, wordt deze genegeerd door bcp_exec.

Returns

SLAGEN, SUCCEED_ASYNC of FAALEN. De bcp_exec-functie geeft SUCCEED terug als alle rijen worden gekopieerd. bcp_exec geeft SUCCEED_ASYNC terug als een asynchrone bulk-kopieeroperatie nog openstaat. bcp_exec geeft FOUT terug als er een volledige fout optreedt, of als het aantal rijen dat fouten genereert de waarde bereikt die is gespecificeerd voor BCPMAXERRS met bcp_control. BCPMAXERRS staat standaard op 10. De BCPMAXERRS-optie beïnvloedt alleen de syntaxisfouten die door de provider worden gedetecteerd tijdens het lezen van de rijen uit het databestand (en niet de rijen die naar de server worden gestuurd). De server stopt de batch wanneer hij een fout met een rij detecteert. Controleer de parameter pnRowsProcessed voor het aantal succesvol gekopieerde rijen.

Remarks

Deze functie kopieert gegevens van een gebruikersbestand naar een databasetabel of omgekeerd, afhankelijk van de waarde van de eDirection-parameter in bcp_init.

Bel bcp_init voordat je bcp_exec aanroept met een geldige gebruikersbestandsnaam. Als u dit niet doet, treedt er een fout op.

bcp_exec is de enige bulk-kopieerfunctie die waarschijnlijk voor enige tijd uitvalt. Het is daarom de enige bulk-kopieerfunctie die asynchrone modus ondersteunt. Om asynchrone modus in te stellen, gebruik SQLSetConnectAttr om SQL_ATTR_ASYNC_ENABLE op SQL_ASYNC_ENABLE_ON te zetten voordat je bcp_exec aanroept. Om te testen op voltooiing, roep bcp_exec aan met dezelfde parameters. Als de bulkkopie nog niet is voltooid, stuurt bcp_exec SUCCEED_ASYNC terug. In pnRowsProcessed geeft het ook een statustelling terug van het aantal rijen dat naar de server is gestuurd. Rijen die naar de server worden gestuurd, worden pas vastgelegd nadat het einde van een batch is bereikt.

Voor informatie over een breaking change in bulk-copying vanaf SQL Server 2005 (9.x), zie Performing Bulk Copy Operations (ODBC).

Example

Het volgende voorbeeld laat zien hoe je bcp_exec gebruikt:

// 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.