bcp_control
Ändert die Standardeinstellungen für verschiedene Steuerelementparameter für einen Massenkopiervorgang 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 ausgeführten Massenkopiervorgang zu beenden. Der iValue-Parameter wird ignoriert.
BCPBATCH
Die Anzahl von Zeilen pro Batch. Der Standardwert ist 0. Dies gibt entweder alle Zeilen in einer Tabelle an, wenn Daten extrahiert werden, oder alle Zeilen in der Benutzerdatendatei, wenn Daten in eine SQL Server kopiert werden. Ein Wert kleiner als 1 setzt BCPBATCH auf den Standardwert zurück.
BCPDELAYREADFMT
Wenn ein boolescher Wert auf TRUE festgelegt ist, wird bcp_readfmt bei der Ausführung gelesen. Bei false (Standardeinstellung) liest bcp_readfmt sofort die Formatdatei. Ein Sequenzfehler tritt auf, wenn BCPDELAYREADFMT true ist und Sie bcp_columns oder bcp_setcolfmt aufrufen.
Ein Sequenzfehler tritt auch auf, wenn Sie BCPDELAYREADFMT, (void *)FALSE)
aufrufenbcp_control(hdbc,
, nachdem Sie BCPDELAYREADFMT, (void *)TRUE)
und bcp_writefmt aufgerufen bcp_control(hdbc,
haben.
Weitere Informationen finden Sie unter Metadatenermittlung.
BCPFILECP
iValue enthält die Nummer 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: Die Daten in der Datei befinden sich in Microsoft Windows?? Codepage des Clients.
BCPFILE_OEMCP: Daten in der Datei befinden sich auf der OEM-Codepage des Clients (Standard).
BCPFILE_RAW: Die Daten in der Datei befinden sich auf der Codepage des SQL Server.
BCPFILEFMT
Die Versionsnummer des Datendateiformats. Dies kann 80 (SQL Server 2000), 90 (SQL Server 2005), 100 (SQL Server 2008 oder SQL Server 2008 R2), 110 (SQL Server 2012) oder 120 (SQL Server 2014) sein. 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-Server in eine varchar(max)-Spalte auf einem Server SQL Server 2005 oder höher abgerufen wurden, müssen Sie 80 angeben. Wenn Sie beim Exportieren von Daten aus einer varchar(max)-Spalte den Wert "80" angeben, wird diese ebenso wie Textspalten im format SQL Server 2000 gespeichert und kann in eine Textspalte eines SQL Server 2000-Servers importiert werden.
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.
Es wird erwartet, dass der iValue-Parameter die Adresse einer signierten 64-Bit-Ganzzahl ist, die den Wert enthält. Der maximale Wert, 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. Beispielsweise können Sie das Präfix und den Abschlusszeichen 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 ist.
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 Massenkopiervorgängen finden Sie unter bcp-Hilfsprogramm.
BCPKEEPIDENTITY
Wenn iValue AUF TRUE festgelegt ist, gibt an, dass Massenkopierfunktionen Datenwerte einfügen, die für SQL Server Spalten bereitgestellt werden, 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 AUF TRUE festgelegt ist, werden leere Werte in der SQL Server Tabelle in NULL 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.
Es wird erwartet, dass der iValue-Parameter die Adresse einer signierten 64-Bit-Ganzzahl ist, 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 den Standardwert 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
Gibt bei TRUE an, dass im Zeichenformat gespeicherte datetime - und smalldatetime-Werte das ODBC-Zeitstempel-Escapesequenzpräfix und -Suffix verwenden. Die BCPODBC-Option gilt nur für BCP_OUT.
Bei FALSE wird ein datetime-Wert , der den 1. Januar 1997 darstellt, in die Zeichenfolge konvertiert: 1997-01-01 00:00:00.000. Bei TRUE 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
Der Wert für die angegebene eOption. iValue ist ein ganzzahliger Wert (LONGLONG), der in einen void-Zeiger umgewandelt wird, um eine zukünftige Erweiterung auf 64-Bit-Werte zu ermöglichen.
Gibt zurück
SUCCEED oder FAIL.
Bemerkungen
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 Massenkopieren aus SQL Server dem Resultset eines SELECT anzugeben. Legen Sie eOption auf BCPHINTS fest, und legen Sie iValue auf einen Zeiger auf eine SQLTCHAR-Zeichenfolge fest, die die SELECT-Anweisung enthält.
Diese Steuerelementparameter sind nur beim Kopieren zwischen einer Benutzerdatei und einer SQL Server Tabelle sinnvoll. 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);