Freigeben über


bcp_colfmt

Gibt das Quell- oder Zielformat der Daten in einer Benutzerdatei an. Wenn bcp_colfmt als Quellformat verwendet wird, gibt bcp_colfmt das Format einer vorhandenen Datendatei an, die als Datenquelle in einer Massenkopie in einer SQL Server-Tabelle verwendet wird. Bei Verwendung als Zielformat wird die Datendatei mit den spaltenformaten erstellt, die mit bcp_colfmt angegeben sind.

Syntax

  
RETCODE bcp_colfmt (  
HDBC   
hdbc  
,  
INT  
idxUserDataCol  
,  
BYTE   
eUserDataType  
,  
INT   
cbIndicator  
,  
DBINT   
cbUserData  
,  
LPCBYTE   
pUserDataTerm  
,  
INT   
cbUserDataTerm  
,  
INT   
idxServerCol  
);  
  

Argumente

hdbc
Das für den Massenkopiervorgang aktivierte ODBC-Verbindungshandle.

idxUserDataCol
Ist die Ordnungsspaltennummer in der Benutzerdatendatei, für die das Format angegeben wird. Die erste Spalte ist 1.

eUserDataType
Ist der Datentyp dieser Spalte in der Benutzerdatei. Wenn sich der Datentyp der entsprechenden Spalte in der Datenbanktabelle (idxServerColumn) unterscheidet, konvertiert die Massenkopie die Daten nach Möglichkeit.

SQL Server 2005 hat unterstützung für SQLXML- und SQLUDT-Datentyptoken im eUserDataType-Parameter eingeführt.

Der Parameter "eUserDataType " wird von den SQL Server-Datentyptoken in "sqlncli.h" und nicht von den ODBC-C-Datentypen aufgezählt. Sie können z. B. eine Zeichenfolge, einen ODBC-Typ SQL_C_CHAR, mithilfe des SQL Server-spezifischen Typs SQLCHARACTER angeben.

Um die Standarddatendarstellung für den SQL Server-Datentyp anzugeben, legen Sie diesen Parameter auf 0 fest.

Bei einer Massenkopie aus SQL Server in eine Datei, wenn eUserDataType SQLDECIMAL oder SQLNUMERIC ist:

  • Wenn die Quellspalte nicht dezimal oder numerisch ist, werden die Standardgenauigkeit und -skalierung verwendet.

  • Wenn die Quellspalte dezimal oder numerisch ist, werden die Genauigkeit und skalierung der Quellspalte verwendet.

cbIndicator
Ist die Länge eines Längen-/NULL-Indikators innerhalb der Spaltendaten in Bytes. Gültige Indikatorlängenwerte sind 0 (wenn kein Indikator verwendet wird), 1, 2, 4 oder 8.

Legen Sie diesen Parameter auf SQL_VARLEN_DATA fest, um die Standardmäßige Verwendung des Massenkopienindikators anzugeben.

Indikatoren werden direkt vor daten und in der Datendatei direkt vor den Daten angezeigt, auf die sie angewendet werden.

Wenn mehr als ein Mittel zum Angeben einer Datendateispaltenlänge verwendet wird (z. B. ein Indikator und eine maximale Spaltenlänge oder ein Indikator und eine Terminatorsequenz), wählt die Massenkopie die Spalte aus, die zu der geringsten Datenmenge führt, die kopiert wird.

Datendateien, die durch Massenkopie generiert werden, wenn kein Benutzereingriff das Format der Daten anpasst, indikatoren enthalten, wenn die Spaltendaten in der Länge variieren können oder die Spalte NULL als Wert akzeptieren kann.

cbUserData
Ist die maximale Länge in Byte der Daten dieser Spalte in der Benutzerdatei, nicht einschließlich der Länge eines Längenindikators oder Terminators.

Wenn cbUserData auf SQL_NULL_DATA festgelegt wird, wird angegeben, dass alle Werte in der Datendateispalte vorhanden sind oder auf NULL festgelegt werden sollen.

Wenn cbUserData auf SQL_VARLEN_DATA festgelegt wird, wird angegeben, dass das System die Länge der Daten in jeder Spalte bestimmen soll. Bei einigen Spalten kann dies bedeuten, dass ein Längen-/NULL-Indikator generiert wird, um Daten einer Kopie aus SQL Server vorauszugehen, oder dass der Indikator in Daten in SQL Server kopiert wird.

Bei SQL Server-Zeichen- und Binären Datentypen kann cbUserData SQL_VARLEN_DATA, SQL_NULL_DATA, 0 oder ein positiver Wert sein. Wenn cbUserData SQL_VARLEN_DATA ist, verwendet das System entweder den Längenindikator, falls vorhanden, oder eine Terminatorsequenz, um die Länge der Daten zu bestimmen. Wenn sowohl ein Längenindikator als auch eine Terminatorsequenz bereitgestellt werden, verwendet die Massenkopie das Element, das zu der geringsten Datenmenge führt, die kopiert wird. Wenn cbUserData SQL_VARLEN_DATA ist, handelt es sich beim Datentyp um ein SQL Server-Zeichen oder einen binären Typ, und weder ein Längenindikator noch eine Terminatorsequenz wird angegeben, gibt das System eine Fehlermeldung zurück.

Wenn cbUserData 0 oder ein positiver Wert ist, verwendet das System cbUserData als maximale Datenlänge. Wenn jedoch zusätzlich zu einer positiven cbUserData eine Längenindikator- oder Terminatorsequenz bereitgestellt wird, bestimmt das System die Datenlänge mithilfe der Methode, die zu der geringsten Datenmenge führt, die kopiert wird.

Der cbUserData-Wert stellt die Anzahl der Bytes von Daten dar. Wenn Zeichendaten durch Unicode-breite Zeichen dargestellt werden, stellt ein positiver cbUserData-Parameterwert die Anzahl von Zeichen dar, die mit der Größe (in Byte) jedes Zeichens multipliziert werden.

pUserDataTerm
Ist die Terminatorsequenz, die für diese Spalte verwendet werden soll. Dieser Parameter ist hauptsächlich für Zeichendatentypen nützlich, da alle anderen Typen eine feste Länge aufweisen oder bei Binären Daten einen Indikator der Länge erfordern, um die Anzahl der vorhandenen Bytes genau aufzuzeichnen.

Um das Beenden extrahierter Daten zu vermeiden oder anzugeben, dass Daten in einer Benutzerdatei nicht beendet werden, legen Sie diesen Parameter auf NULL fest.

Wenn mehr als ein Mittel zum Angeben der Länge einer Benutzerdateispalte verwendet wird (z. B. ein Terminator und ein Längenindikator oder ein Terminator und eine maximale Spaltenlänge), wählt die Massenkopie das Element aus, das zu der geringsten Datenmenge führt, die kopiert wird.

Die API für das Massenkopieren führt nach Bedarf eine Zeichenkonvertierung von Unicode in MBCS aus. Achten Sie darauf, dass sowohl die Zeichenfolge des Endatorbytes als auch die Länge der Bytezeichenfolge korrekt festgelegt sind.

cbUserDataTerm
Ist die Länge der Für diese Spalte zu verwendenden Terminatorsequenz in Byte. Wenn in den Daten kein Terminator vorhanden oder gewünscht ist, legen Sie diesen Wert auf 0 fest.

idxServerCol
Ist die Ordnungsposition der Spalte in der Datenbanktabelle. Die erste Spaltennummer ist 1. Die Ordnungsposition einer Spalte wird von SQLColumnsausgegeben.

Wenn dieser Wert 0 ist, ignoriert die Massenkopie die Spalte in der Datendatei.

Rückkehr

SUCCEED oder FAIL.

Bemerkungen

Mit der bcp_colfmt-Funktion können Sie das Benutzerdateiformat für Massenkopien angeben. Bei Massenkopien enthält ein Format die folgenden Teile:

  • Eine Zuordnung von Benutzerdateispalten zu Datenbankspalten.

  • Der Datentyp jeder Benutzerdateispalte.

  • Die Länge des optionalen Indikators für jede Spalte.

  • Die maximale Länge der Daten pro Benutzerdateispalte.

  • Die optionale Endbytesequenz für jede Spalte.

  • Die Länge der optionalen Beendende Bytesequenz.

Jeder Aufruf von bcp_colfmt gibt das Format für eine Benutzerdateispalte an. Wenn Sie beispielsweise die Standardeinstellungen für drei Spalten in einer Datendatei mit fünf Spalten ändern möchten, rufen Sie zuerst bcp_columns(5) auf, und rufen Sie dann fünf Mal bcp_colfmt auf, wobei drei dieser Anrufe ihr benutzerdefiniertes Format festlegen. Legen Sie für die verbleibenden beiden Aufrufe eUserDataType auf 0 fest, und legen Sie cbIndicator, cbUserData und cbUserDataTerm auf 0, SQL_VARLEN_DATA bzw. 0 fest. Dieses Verfahren kopiert alle fünf Spalten, drei mit ihrem angepassten Format und zwei mit dem Standardformat.

Für cbIndicator ist ein Wert von 8, der angibt, dass ein großer Werttyp jetzt gültig ist. Wenn das Präfix für ein Feld angegeben ist, dessen entsprechende Spalte ein neuer Max-Typ ist, kann es nur auf 8 festgelegt werden. Ausführliche Informationen finden Sie unter bcp_bind.

Die bcp_columns-Funktion muss aufgerufen werden, bevor Aufrufe von bcp_colfmt aufgerufen werden.

Sie müssen bcp_colfmt einmal für jede Spalte in der Benutzerdatei aufrufen.

Das Aufrufen bcp_colfmt mehr als einmal für jede Benutzerdateispalte verursacht einen Fehler.

Sie müssen nicht alle Daten in einer Benutzerdatei in die SQL Server-Tabelle kopieren. Um eine Spalte zu überspringen, geben Sie das Format der Daten für die Spalte an, und legen Sie den parameter idxServerCol auf 0 fest. Wenn Sie eine Spalte überspringen möchten, müssen Sie dessen Typ angeben.

Die bcp_writefmt-Funktion kann verwendet werden, um die Formatspezifikation beizubehalten.

bcp_colfmt Unterstützung für erweiterte Datums- und Uhrzeitfeatures

Informationen zu typen, die mit dem eUserDataType-Parameter für Datums-/Uhrzeittypen verwendet werden, finden Sie unter "Massenkopieänderungen für erweiterte Datums- und Uhrzeittypen (OLE DB und ODBC)".

Weitere Informationen finden Sie unter "Datums- und Uhrzeitverbesserungen (ODBC)".

Siehe auch

Massenkopierfunktionen