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 das Massenkopieren aktivierte ODBC-Verbindungshandle.eOption
Entspricht einem der folgenden Werte:BCPABORT
Beendet einen Massenkopiervorgang, der bereits ausgeführt wird. Rufen Sie bcp_control mit dem eOption-Wert BCPABORT von einem anderen Thread auf, um einen laufenden Massenkopiervorgang zu beenden. Der iValue-Parameter wird ignoriert.BCPBATCH
Die Anzahl von Zeilen pro Batch. Der Standardwert ist 0 (null), womit beim Extrahieren von Daten alle Zeilen in einer Tabelle oder beim Kopieren von Daten nach SQL Server alle Zeilen in der Benutzerdatendatei angegeben werden. Ein Wert kleiner als 1 setzt BCPBATCH auf den Standardwert zurück.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 WerteBCPFILE_ACP: Daten in der Datei befinden sich auf der Microsoft Windows® Codepage 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 von SQL Server.
BCPFILEFMT
Die Versionsnummer des Datendateiformats. Dies kann 70 (SQL Server 7.0), 80 (SQL Server 2000), 90 (SQL Server 2005) oder 100 (SQL Server 2008) sein. 100 ist der Standard und gibt an, dass die Datei im SQL Server 2008-Format gespeichert ist. Dies ist nützlich beim Exportieren und Importieren von Daten in Formaten, die in früheren Versionen des Servers unterstützt wurden. Geben Sie beispielsweise zum Importieren von Daten aus einer Textspalte eines SQL Server 2000-Servers in eine varchar(max)-Spalte auf einem SQL Server 2005-Server oder höher den Wert 80 an. Wenn Sie den Wert 80 entsprechend beim Exportieren von Daten aus einer varchar(max)-Spalte angeben, werden diese wie Textspalten im SQL Server 2000-Format gespeichert und können 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.
Der iValue-Parameter sollte die Adresse einer 64-Bit-Ganzzahl mit Vorzeichen sein, 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 das XML-Format aufweisen sollte. Diese Option ist standardmäßig deaktiviert.XML-Formatdateien bieten größere Flexibilität, sind jedoch mit einigen Einschränkungen verbunden. Sie können beispielsweise das Präfix und das Abschlusszeichen für ein Feld nicht gleichzeitig angeben, was in älteren Formatdateien durchaus 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 über Verarbeitungshinweise für das Massenkopieren finden Sie unter bcp (Dienstprogramm).BCPKEEPIDENTITY
Wenn iValue auf TRUE festgelegt ist, wird hiermit angegeben, dass Massenkopierfunktionen Datenwerte einfügen, die für SQL Server-Spalten bereitgestellt werden, die mit einer IDENTITY-Einschrä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.
Der iValue-Parameter sollte die Adresse einer 64-Bit-Ganzzahl mit Vorzeichen sein, 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 Standard 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
Ist diese Option auf TRUE festgelegt, wird angegeben, dass die im Zeichenformat gespeicherten Werte datetime und smalldatetime das Präfix- und Suffixzeichen der Escapesequenz für die ODBC-Timestamp-Daten verwenden. Die BCPODBC-Option gilt nur für BCP_OUT.Wenn der Wert FALSE ist, wird ein datetime-Wert, der den 1. Januar 1997 darstellt, in die folgende Zeichenfolge konvertiert: 1997-01-01 00:00:00.000. Ist der Wert TRUE, wird der gleiche 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 zukünftige Erweiterungen auf 64-Bit-Werte zuzulassen.
Rückgabewerte
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.
Außerdem wird diese Funktion dazu verwendet, die SELECT-Anweisung beim Massenkopieren des Resultsets einer SELECT-Anweisung aus SQL Server anzugeben. Legen Sie eOption auf BCPHINTS und iValue fest, um einen Zeiger auf eine SQLTCHAR-Zeichenfolge mit der SELECT-Anweisung zur Verfügung zu haben.
Diese Steuerelementparameter sind nur beim Kopieren zwischen einer Benutzerdatei und einer SQL Server-Tabelle sinnvoll. Steuerelementparameter-Einstellungen wirken sich nicht auf Zeilen aus, die mit bcp_sendrow in SQL Server kopiert werden.
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);