bcp_control
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)
Ändert die Standardeinstellungen für verschiedene Steuerelementparameter für eine Massenkopie zwischen einer Datei und SQL Server.
Syntax
RETCODE bcp_control (
HDBC hdbc,
INT eOption,
void* iValue);
Argumente
hdbc
Das für den Massenkopiervorgang aktivierte ODBC-Verbindungshandle.
eOption
Ist einer der folgenden Werte:
BCPABORT
Beendet einen Massenkopiervorgang, der bereits ausgeführt wird. Rufen Sie bcp_control mit einer eOption von BCPABORT aus einem anderen Thread auf, um einen laufenden Massenkopievorgang zu beenden. Der Parameter "iValue " wird ignoriert.
BCPBATCH
Die Anzahl von Zeilen pro Batch. Der Standardwert ist 0, der entweder alle Zeilen in einer Tabelle angibt, wenn Daten extrahiert werden, oder alle Zeilen in der Benutzerdatendatei, wenn Daten in einen SQL Server kopiert werden. Ein Wert kleiner als 1 setzt BCPBATCH auf den Standardwert zurück.
BCPDELAYREADFMT
Ein boolescher Wert, wenn er auf "true" festgelegt ist, führt dazu, dass bcp_readfmt bei der Ausführung gelesen wird. Wenn "false" (Standardeinstellung) bcp_readfmt die Formatdatei sofort liest. Wenn BCPDELAYREADFMT wahr ist, tritt ein Sequenzfehler auf, und Sie rufen bcp_columns oder bcp_setcolfmt auf.
Ein Sequenzfehler tritt auch auf, wenn Sie BCPDELAYREADFMT nach dem Aufrufen von BCPDELAYREADFMT und bcp_writefmt aufrufen bcp_control(hdbc,
bcp_control(hdbc,
., (void *)FALSE)
, (void *)TRUE)
Weitere Informationen finden Sie unter Metadatenermittlung.
BCPFILECP
iValue enthält die Anzahl der Codepage für die Datendatei. Sie können die Nummer der Codepage angeben, z. B. 1252 oder 850 bzw. einen der folgenden Werte
BCPFILE_ACP: Daten in der Datei befinden sich auf der Microsoft Windows-Codeseite des Clients.
BCPFILE_OEMCP: Daten in der Datei befinden sich auf der OEM-Codepage des Clients (Standard).
BCPFILE_RAW: Daten in der Datei befinden sich auf der Codepage des SQL Server.
BCPFILEFMT
Die Versionsnummer des Datendateiformats. Dies kann 80 ( SQL Server 2000 (8.x)), 90 ( SQL Server 2005 (9.x)), 100 ( SQL Server 2008 (10.0.x) oder SQL sein. Server 2008 R2 (10.50.x)), 110 ( SQL Server 2012 (11.x)) oder 120 ( SQL Server 2014 (12.x)). Der Standardwert ist 120. Dies ist beim Exportieren und Importieren von Daten in Formate nützlich, die in früheren Versionen des Servers unterstützt wurden. Wenn Sie beispielsweise Daten importieren möchten, die aus einer Textspalte in einem SQL Server 2000 (8.x)-Server in eine Varchar(max)-Spalte in einer SQL Server 2005 (9.x) oder höher abgerufen wurden, sollten Sie 80 angeben. Wenn Sie beim Exportieren von Daten aus einer Varchar(max) -Spalte 80 angeben, wird sie genauso gespeichert, wie Textspalten im SQL Server 2000(8.x)-Format gespeichert werden und in eine Textspalte eines SQL Server 2000 (8.x)-Servers importiert werden können.
BCPFIRST
Dies ist die erste Datenzeile der zu kopierenden Datei oder Tabelle. Der Standard ist 1; ein Wert kleiner als 1 setzt diese Option auf den Standardwert zurück.
BCPFIRSTEX
Gibt für BCP-OUT-Vorgänge die erste Zeile der Datenbanktabelle an, die in die Datendatei kopiert werden soll.
Gibt für BCP-IN-Vorgänge die erste Zeile der Datendatei an, die in die Datenbanktabelle kopiert werden soll.
Der iValue-Parameter wird als Adresse einer signierten 64-Bit-Ganzzahl erwartet, die den Wert enthält. Der Maximalwert, der an BCPFIRSTEX übergeben werden kann, ist 2^63-1.
BCPFMTXML
Gibt an, dass die generierte Formatdatei im XML-Format vorliegen soll. Sie ist standardmäßig deaktiviert.
XML-Formatdateien bieten größere Flexibilität, sind jedoch mit einigen Einschränkungen verbunden. Sie können z. B. das Präfix und das Endzeichen für ein Feld nicht gleichzeitig angeben, was in älteren Formatdateien möglich war.
Hinweis
XML-Formatdateien werden nur unterstützt, wenn SQL Server zusammen mit SQL Server Native Client installiert wird.
BCPHINTS
iValue enthält einen SQLTCHAR-Zeichenfolgenzeiger. Die adressierte Zeichenfolge gibt entweder Verarbeitungshinweise für das SQL Server-Massenkopieren oder eine Transact-SQL-Anweisung an, die ein Resultset zurückgibt. Wenn eine Transact-SQL-Anweisung angegeben ist, die mehr als ein Resultset zurückgibt, werden alle auf das erste Resultset folgenden Resultsets nicht berücksichtigt. Weitere Informationen zu Hinweise zur Massenkopieverarbeitung finden Sie unter bcp Utility.
BCPKEEPIDENTITY
Wenn iValue WAHR ist, gibt an, dass Massenkopiefunktionen Datenwerte einfügen, die für SQL Server-Spalten angegeben sind, die mit einer Identitätseinschränkung definiert sind. Die Eingabedatei muss Werte für die IDENTITY-Spalten angeben. Wenn dies nicht festgelegt ist, werden neue Identitätswerte für die eingefügten Zeilen generiert. Alle in der Datei für die IDENTITY-Spalten vorhandenen Daten werden ignoriert.
BCPKEEPNULLS
Bestimmt, ob leere Datenwerte in der Datei in der SQL Server-Tabelle in NULL-Werte konvertiert werden. Wenn "iValue " WAHR ist, werden leere Werte in NULL in der SQL Server-Tabelle konvertiert. In der Standardeinstellung werden leere Werte in einen Standardwert für die Spalte in der SQL Server-Tabelle konvertiert, sofern ein Standardwert angegeben ist.
BCPLAST
Entspricht der letzten zu kopierenden Zeile. In der Standardeinstellung werden alle Zeilen kopiert. Ein Wert kleiner als 1 setzt diese Option auf den Standardwert zurück.
BCPLASTEX
Gibt für BCP-OUT-Vorgänge die letzte Zeile der Datenbanktabelle an, die in die Datendatei kopiert werden soll.
Gibt für BCP-IN-Vorgänge die letzte Zeile der Datendatei an, die in die Datenbanktabelle kopiert werden soll.
Der iValue-Parameter wird als Adresse einer signierten 64-Bit-Ganzzahl erwartet, die den Wert enthält. Der maximale Wert, der an BCPLASTEX übergeben werden kann, ist 2^63-1.
BCPMAXERRS
Gibt die Anzahl von Fehlern an, die zulässig sind, bevor der Massenkopiervorgang fehlschlägt. Der Standardwert ist 10; Ein Wert kleiner als 1 setzt diese Option auf die Standardeinstellung zurück. Beim Massenkopieren sind maximal 65.535 Fehler zulässig. Wenn für diese Option größere Werte als 65.535 festgelegt werden, wird diese Option auf 65.535 festgelegt.
BCPODBC
Wenn TRUE, gibt an, dass datums- und smalldatetime-Werte , die im Zeichenformat gespeichert sind, das PRÄfix und suffix der ODBC-Zeitstempel-Escapesequenz verwendet. Die BCPODBC-Option gilt nur für DB_OUT.
Wenn FALSE, wird ein Datetime-Wert , der den 1. Januar 1997 darstellt, in die Zeichenfolge konvertiert: 1997-01-01 00:00:00.000. Wenn WAHR, wird derselbe Datetime-Wert wie folgt dargestellt: {ts '1997-01-01 00:00:00.000'}.
BCPROWCOUNT
Gibt die Anzahl von Zeilen zurück, auf die sich der aktuelle (oder letzte) BCP-Vorgang auswirkt.
BCPTEXTFILE
Wenn der Wert TRUE ist, wird angegeben, dass die Datendatei eine Textdatei und keine Binärdatei ist. Bei einer Textdatei bestimmt BCP, ob es sich um Unicode handelt, indem der Unicode-Bytemarker in den ersten beiden Bytes der Datendatei überprüft wird.
BCPUNICODEFILE
Wenn der Wert TRUE ist, wird angegeben, dass die Eingabedatei eine Unicode-Datei ist.
iValue
Ist der Wert für die angegebene eOption. iValue ist ein ganzzahliger Wert (LONGLONG), der in einen leeren Zeiger umgewandelt wird, um eine zukünftige Erweiterung auf 64-Bit-Werte zu ermöglichen.
Gibt zurück
SUCCEED oder FAIL.
Hinweise
Mit dieser Funktion werden verschiedene Steuerelementparameter für Massenkopiervorgänge festgelegt, einschließlich der Anzahl von Fehlern, die vor dem Abbrechen eines Massenkopiervorgangs zulässig sind, der Nummern der ersten und letzten Zeilen, die aus einer Datendatei kopiert werden sollen, und der Batchgröße.
Diese Funktion wird auch verwendet, um die SELECT-Anweisung beim Massenkopien aus SQL Server den Resultset einer SELECT anzugeben. Legen Sie "eOption" auf BCPHINTS fest, und legen Sie "iValue" fest, um einen Zeiger auf eine SQLTCHAR-Zeichenfolge zu verwenden, die die SELECT-Anweisung enthält.
Diese Steuerelementparameter sind nur dann sinnvoll, wenn sie zwischen einer Benutzerdatei und einer SQL Server-Tabelle kopiert werden. Steuerelementparametereinstellungen haben keine Auswirkungen auf Zeilen, die mit bcp_sendrow in SQL Server kopiert wurden.
Beispiel
// Variables like henv not specified.
SQLHDBC 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("address"), _T("address.add"), _T("addr.err"),
DB_IN) == FAIL)
{
// Raise error and return.
return;
}
// Set the number of rows per batch.
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)
{
// Raise error and return.
return;
}
// Set file column count.
if (bcp_columns(hdbc, 1) == FAIL)
{
// Raise error and return.
return;
}
// Set the file format.
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)
== FAIL)
{
// Raise error and return.
return;
}
// Execute the bulk copy.
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)
{
// Raise error and return.
return;
}
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);