Angeben der Präfixlänge in Datendateien mittels bcp (SQL Server)
Als kompakteste Form der Dateispeicherung beim Massenexportieren von Daten im systemeigenen Format in eine Datendatei setzt der Befehl bcp mindestens ein Zeichen, das auf die Länge des Felds hinweist, vor jedes Feld. Diese Zeichen werden als Längenpräfixzeichen bezeichnet.
bcp-Eingabeaufforderung für die Präfixlänge
Wenn ein interaktiver bcp-Befehl die Option in oder out, jedoch keinen Formatdateischalter (-f) bzw. keinen Datenformatschalter (-n, -c, -w oder -N) enthält, fordert der Befehl wie folgt zur Eingabe der Präfixlänge für jedes Datenfeld auf:
Enter prefix length of field <field_name> [<default>]:
Wenn Sie 0 angeben, werden Sie von bcp zur Eingabe der Länge des Felds (für einen Zeichendatentyp) oder eines Feldabschlusszeichens (für einen systemeigenen Nicht-Zeichentyp) aufgefordert.
Hinweis |
---|
Nach dem interaktiven Angeben aller Felder in einem Befehl bcp werden Sie dazu aufgefordert, Ihre Antworten für jedes Feld in einer Nicht-XML-Formatdatei zu speichern. Weitere Informationen zu Nicht-XML-Formatdateien finden Sie unter Nicht-XML-Formatdateien (SQL Server). |
Übersicht über die Präfixlänge
Zum Speichern der Präfixlänge eines Felds muss eine ausreichende Anzahl von Bytes vorhanden sein, um die maximale Länge des Felds darzustellen. Die erforderliche Anzahl von Byte hängt auch ab vom Dateispeichertyp, der NULL-Zulässigkeit einer Spalte und davon, ob die Daten in der Datendatei im systemeigenen Format oder im Zeichenformat gespeichert werden. Beispielsweise erfordert der Datentyp text oder image vier Präfixzeichen, um die Feldlänge zu speichern, während der Datentyp varchar zwei Zeichen erfordert. In der Datendatei werden diese Längenpräfixzeichen im internen binären Datenformat von SQL Server gespeichert.
Wichtig |
---|
Beim Verwenden des systemeigenen Formats sollten Sie anstelle von Feldabschlusszeichen eher Längenpräfixe verwenden. Systemeigene Formatdaten können zu Konflikten mit Abschlusszeichen führen, weil eine Datendatei im systemeigenen Format im internen binären Datenformat von SQL Server gespeichert wird. |
Präfixlängen für den Massenexport
Hinweis |
---|
Der Standardwert, der beim Exportieren eines Felds an der Eingabeaufforderung für die Präfixlänge bereitgestellt wird, bezeichnet die effizienteste Präfixlänge für das Feld. |
NULL-Werte werden als leeres Feld dargestellt. Um anzuzeigen, dass das Feld leer ist (NULL darstellt), enthält das Feldpräfix den Wert -1. Das heißt, es ist mindestens 1 Byte erforderlich. Beachten Sie, dass eine SQL Server-Tabellenspalte, wenn sie NULL-Werte zulässt, je nach Dateispeichertyp eine Präfixlänge von 1 oder höher benötigt.
Verwenden Sie die in der folgenden Tabelle gezeigten Präfixlängen, wenn Sie einen Massenexport von Daten vornehmen und diese in systemeigenen Datentypen oder im Zeichenformat speichern.
SQL Server Datentyp |
Systemeigenes Format NOT NULL |
Systemeigenes Format NULL |
Zeichenformat NOT NULL |
Zeichenformat NULL |
---|---|---|---|---|
char |
2 |
2 |
2 |
2 |
varchar |
2 |
2 |
2 |
2 |
nchar |
2 |
2 |
2 |
2 |
nvarchar |
2 |
2 |
2 |
2 |
text1 |
4 |
4 |
4 |
4 |
ntext1 |
4 |
4 |
4 |
4 |
binary |
2 |
2 |
2 |
2 |
varbinary |
2 |
2 |
2 |
2 |
image1 |
4 |
4 |
4 |
4 |
datetime |
0 |
1 |
0 |
1 |
smalldatetime |
0 |
1 |
0 |
1 |
decimal |
1 |
1 |
1 |
1 |
numeric |
1 |
1 |
1 |
1 |
float |
0 |
1 |
0 |
1 |
real |
0 |
1 |
0 |
1 |
int |
0 |
1 |
0 |
1 |
bigint |
0 |
1 |
0 |
1 |
smallint |
0 |
1 |
0 |
1 |
tinyint |
0 |
1 |
0 |
1 |
money |
0 |
1 |
0 |
1 |
smallmoney |
0 |
1 |
0 |
1 |
bit |
0 |
1 |
0 |
1 |
uniqueidentifier |
1 |
1 |
0 |
1 |
timestamp |
1 |
1 |
1 |
1 |
varchar(max) |
8 |
8 |
8 |
8 |
varbinary(max) |
8 |
8 |
8 |
8 |
UDT (ein benutzerdefinierter Datentyp) |
8 |
8 |
8 |
8 |
XML |
8 |
8 |
8 |
8 |
1 Die Datentypen ntext, text und image werden in einer zukünftigen Version von SQL Server nicht mehr unterstützt. Vermeiden Sie diese Datentypen bei Neuentwicklungen, und planen Sie die Änderung derjenigen Anwendungen, in denen diese Datentypen derzeit verwendet werden. Verwenden Sie stattdessen nvarchar(max), varchar(max) und varbinary(max).
Präfixlängen für den Massenimport
Wenn Daten massenimportiert werden, entspricht die Präfixlänge dem Wert, der beim ursprünglichen Erstellen der Datendatei angegeben wurde. Wenn die Datendatei nicht mit einem bcp-Befehl erstellt wurde, sind wahrscheinlich keine Längenpräfixzeichen vorhanden. In diesem Fall sollten Sie 0 als Präfixlänge angeben.
Hinweis |
---|
Verwenden Sie die weiter oben in diesem Thema unter Präfixlängen für den Massenexport bereitgestellten Präfixlängen, um die Präfixlänge in einer Datendatei anzugeben, die nicht mithilfe von bcp erstellt wurde. |
Siehe auch
Verweis
Konzepte
Angeben der Feldlänge mithilfe von bcp (SQL Server)