bcp_exec
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)
Führt ein vollständiges Massenkopieren der Daten zwischen einer Datenbanktabelle und einer Benutzerdatei aus.
Syntax
RETCODE bcp_exec (
HDBC hdbc,
LPDBINT pnRowsProcessed);
Argumente
hdbc
Das für den Massenkopiervorgang aktivierte ODBC-Verbindungshandle.
pnRowsProcessed
Ein Zeiger auf DBINT. Die bcp_exec -Funktion füllt DBINT mit der Anzahl der erfolgreich kopierten Zeilen. Wenn pnRowsProcessed auf NULL festgelegt ist, wird es von bcp_execignoriert.
Gibt zurück
SUCCEED, SUCCEED_ASYNC oder FAIL. Die bcp_exec -Funktion gibt SUCCEED zurück, wenn alle Zeilen kopiert wurden. bcp_exec gibt SUCCEED_ASYNC zurück, falls ein asynchroner Massenkopiervorgang aussteht. bcp_exec gibt FAIL zurück, wenn ein vollständiger Fehler auftritt oder wenn die Anzahl der Zeilen, die Fehler generieren, den in BCPMAXERRS mithilfe von bcp_controlangegebenen Wert erreicht. BCPMAXERRS ist standardmäßig auf 10 festgelegt. Die BCPMAXERRS-Option wirkt sich nur auf die Syntaxfehler aus, die vom Anbieter während des Lesens der Zeilen aus der Datendatei (und nicht der Zeilen, die an den Server gesendet werden) erkannt werden. Der Server bricht den Batch ab, wenn er einen Fehler in einer Zeile erkennt. Überprüfen Sie den pnRowsProcessed -Parameter auf die Anzahl an erfolgreich kopierten Zeilen.
Hinweise
Diese Funktion kopiert Daten aus einer Datendatei in eine Datenbanktabelle oder umgekehrt, abhängig vom Wert des eDirection -Parameters in bcp_init.
Vor dem Aufrufen von bcp_execrufen Sie bcp_init mit einem gültigen Benutzerdateinamen auf. Andernfalls wird ein Fehler ausgelöst.
bcp_exec ist die einzige Massenkopierfunktion, die im Allgemeinen für eine beliebige Zeitlänge aussteht. Es ist deshalb die einzige Massenkopierfunktion, die den asynchronen Modus unterstützt. Um den asynchronen Modus festzulegen, verwenden Sie SQLSetConnectAttr , um SQL_ATTR_ASYNC_ENABLE auf SQL_ASYNC_ENABLE_ON festzulegen, bevor Sie bcp_execaufrufen. Rufen Sie bcp_exec mit denselben Parametern auf, um den Vorgang auf Vollständigkeit zu überprüfen. Wenn das Massenkopieren noch nicht abgeschlossen wurde, gibt bcp_exec SUCCEED_ASYNC zurück. Außerdem wird in pnRowsProcessed eine Statuszahl der Anzahl der Zeilen zurückgegeben, die an den Server gesendet wurden. Für die zum Server gesendeten Zeilen wird erst ein Commit ausgeführt, wenn das Ende eines Batches erreicht wurde.
Informationen zu einer bedeutenden Änderung des Massenkopiervorgangs ab SQL Server 2005 (9.x) finden Sie unter Ausführen von Massenkopievorgängen (ODBC).
Beispiel
Im folgenden Beispiel wird die Verwendung von bcp_execveranschaulicht:
// 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.