Freigeben über


bcp_control

Ä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 eine der folgenden:

BCPABORT
Stoppt einen Massenkopievorgang, 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
Ist die Anzahl der 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 die Standardeinstellung zurück.

BCPDELAYREADFMT
Ein boolescher Wert, wenn er auf "true" festgelegt ist, bewirkt, 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 Anzahl der Codepage angeben, z. B. 1252 oder 850, oder einen der folgenden Werte:

BCPFILE_ACP: Daten in der Datei befinden sich in Microsoft Windows?? Codepage des Clients.

BCPFILE_OEMCP: Daten in der Datei befinden sich auf der OEM-Codeseite 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), 90 (SQL Server 2005), 100 (SQL Server 2008 oder SQL Server 2008 R2), 110 (SQL Server 2012) oder 120 (SQL Server 2014) sein. 120 ist die Standardeinstellung. Dies ist hilfreich beim Exportieren und Importieren von Daten in Formaten, die von früheren Versionen des Servers unterstützt wurden. Um z. B. Daten, die aus einer Textspalte in einem SQL Server 2000-Server abgerufen wurden, in eine Varchar(max) -Spalte in einem SQL Server 2005 oder höher zu importieren, 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-Format gespeichert werden und in eine Textspalte eines SQL Server 2000-Servers importiert werden können.

BCPFIRST
Ist die erste Datenzeile, die kopiert werden soll, in die Datei oder Tabelle kopiert werden soll. Der Standardwert ist 1; Ein Wert kleiner als 1 setzt diese Option auf die Standardeinstellung zurück.

BCPFIRSTEX
Gibt für BCP-Outvorgänge die erste Zeile der Datenbanktabelle an, die in die Datendatei kopiert werden soll.

Gibt für BCP in Vorgängen 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, aber mit einigen zusätzlichen Einschränkungen. 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 SQL Server-Massenkopienverarbeitungshinweise oder eine Transact-SQL-Anweisung an, die ein Resultset zurückgibt. Wenn eine Transact-SQL-Anweisung angegeben wird, die mehr als ein Resultset zurückgibt, werden alle Resultsets nach der ersten ignoriert. 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 Identitätsspalten angeben. Wenn dies nicht festgelegt ist, werden neue Identitätswerte für die eingefügten Zeilen generiert. Alle Daten, die in der Datei für die Identitätsspalten vorhanden sind, werden ignoriert.

BCPKEEPNULLS
Gibt an, ob leere Datenwerte in der Datei in NULL-Werte in der SQL Server-Tabelle konvertiert werden. Wenn "iValue " WAHR ist, werden leere Werte in NULL in der SQL Server-Tabelle konvertiert. Der Standardwert ist für leere Werte, die in einen Standardwert für die Spalte in der SQL Server-Tabelle konvertiert werden sollen, wenn eine Standardeinstellung vorhanden ist.

BCPLAST
Ist die letzte Zeile, die kopiert werden soll. Standardmäßig werden alle Zeilen kopiert. Ein Wert kleiner als 1 setzt diese Option auf die Standardeinstellung zurück.

BCPLASTEX
Gibt für BCP-Outvorgänge die letzte Zeile der Datenbanktabelle an, die in die Datendatei kopiert werden soll.

Gibt für BCP in Vorgängen 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 Maximalwert, der an BCPLASTEX übergeben werden kann, ist 2^63-1.

BCPMAXERRS
Gibt an, wie viele Fehler zulässig sind, bevor der Massenkopievorgang fehlschlägt. Der Standardwert ist 10; Ein Wert kleiner als 1 setzt diese Option auf die Standardeinstellung zurück. Massenkopie erzwingt maximal 65.535 Fehler. Ein Versuch, diese Option auf einen Wert festzulegen, der größer als 65.535 ist, führt dazu, dass die Option auf 65.535 festgelegt wird.

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 BCP_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 der Zeilen zurück, die von dem aktuellen (oder letzten) BCP-Vorgang betroffen sind.

BCPTEXTFILE
Wenn WAHR, gibt an, dass es sich bei der Datendatei um eine Textdatei und nicht um eine Binärdatei handelt. Wenn es sich bei der Datei um eine Textdatei handelt, bestimmt BCP, ob sie Unicode ist, indem die Unicode-Bytemarkierung in den ersten beiden Bytes der Datendatei überprüft wird.

BCPUNICODEFILE
Wenn WAHR, gibt die Eingabedatei eine Unicode-Datei an.

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.

Rückkehr

SUCCEED oder FAIL.

Bemerkungen

Diese Funktion legt verschiedene Steuerelementparameter für Massenkopievorgänge fest, einschließlich der Anzahl der vor dem Abbrechen einer Massenkopie zulässigen Fehler, die Zahlen der ersten und letzten Zeilen, die aus einer Datendatei kopiert werden sollen, und die 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);  
  

Siehe auch

Massenkopierfunktionen