Angeben der Präfixlänge in Datendateien mittels bcp (SQL Server)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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, -woder -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 nativen Nicht-Zeichentyp) aufgefordert.
Hinweis
Nachdem Sie interaktiv alle Felder in einem bcp-Befehl angegeben haben, werden Sie vom Befehl dazu aufgefordert, Ihre Antworten für die einzelnen Felder 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 |
text* | 4 | 4 | 4 | 4 |
ntext* | 4 | 4 | 4 | 4 |
binary | 2 | 2 | 2 | 2 |
varbinary | 2 | 2 | 2 | 2 |
Abbildung* | 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 |
sql_variant | 8 | 8 | 8 | 8 |
* Die Datentypen ntext, text und image werden in einer zukünftigen Version von SQL Server entfernt. Vermeiden Sie die Verwendung dieser Datentypen bei neuen Entwicklungen, und planen Sie die Änderung von Anwendungen, in denen sie aktuell 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.
Weitere Informationen
bcp (Hilfsprogramm)
Datentypen (Transact-SQL)
Angeben der Feldlänge mithilfe von bcp (SQL Server)
Angeben von Feld- und Zeilenabschlusszeichen (SQL Server)
Angeben des Dateispeichertyps mithilfe von bcp (SQL Server)