bcp_exec
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Esegue una copia bulk completa di dati tra una tabella di database e un file utente.
Sintassi
RETCODE bcp_exec (
HDBC hdbc,
LPDBINT pnRowsProcessed);
Argomenti
hdbc
Handle di connessione ODBC abilitato per la copia bulk.
pnRowsProcessed
Puntatore a DBINT. La funzione bcp_exec riempie questo DBINT con il numero di righe copiate correttamente. Se pnRowsProcessed è NULL, viene ignorato da bcp_exec.
Valori restituiti
SUCCEED, SUCCEED_ASYNC o FAIL. La funzione bcp_exec restituisce SUCCEED se vengono copiate tutte le righe. bcp_exec restituisce SUCCEED_ASYNC se un'operazione di copia bulk asincrona è ancora in sospeso. bcp_exec restituisce FAIL se si verifica un errore completo o se il numero di righe che generano errori raggiunge il valore specificato per BCPMAXERRS usando bcp_control. Il valore predefinito BCPMAXERRS è 10. L'opzione BCPMAXERRS influisce solo sugli errori di sintassi rilevati dal provider durante la lettura delle righe dal file di dati, ma non delle righe inviate al server. Il server interrompe il batch quando rileva un errore con una riga. Controllare il parametro pnRowsProcessed per il numero di righe copiate correttamente.
Osservazioni:
Questa funzione copia i dati da un file utente a una tabella di database o viceversa, a seconda del valore del parametro eDirection in bcp_init.
Prima di chiamare bcp_exec, chiamare bcp_init con un nome file utente valido. In caso contrario, viene generato un errore.
bcp_exec è l'unica funzione di copia bulk probabilmente in sospeso per qualsiasi periodo di tempo. è anche l'unica funzione di copia bulk che supporta la modalità asincrona. Per impostare la modalità asincrona, usare SQLSetConnectAttr per impostare SQL_ATTR_ASYNC_ENABLE su SQL_ASYNC_ENABLE_ON prima di chiamare bcp_exec. Per verificare il completamento, chiamare bcp_exec con gli stessi parametri. Se la copia bulk non è ancora stata completata, bcp_exec restituisce SUCCEED_ASYNC. Restituisce anche in pnRowsProcessed un conteggio dello stato del numero di righe inviate al server. Il commit delle righe inviate al server non viene eseguito fino a quando non viene raggiunta la fine di un batch.
Per informazioni su una modifica di rilievo nella copia bulk a partire da SQL Server 2005 (9.x), vedere Esecuzione di operazioni di copia bulk (ODBC).
Esempio
L'esempio seguente illustra come usare 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.