Angeben der Feldlänge mithilfe von bcp

Die Feldlänge gibt die maximale Anzahl von Zeichen an, die zum Darstellen der Daten im Zeichenformat benötigt werden. Die Feldlänge ist bereits bekannt, wenn die Daten im systemeigenen Format gespeichert werden (z. B. der int-Datentyp, der 4 Bytes benötigt). Wenn Sie für die Präfixlänge 0 angeben, werden Sie vom bcp-Befehl aufgefordert, die Feldlänge, die Standardfeldlängen sowie die Auswirkung der Feldlänge auf die Datenspeicherung in Datendateien mit char-Daten anzugeben.

Die bcp-Eingabeaufforderung für die Feldlänge

Wenn ein interaktiver bcp-Befehl eine der Optionen in oder out, aber keinen Formatdateiparameter (-f) oder keinen Datenformatparameter (-n, -c, -w oder -N) enthält, werden Sie wie folgt aufgefordert, für jedes Datenfeld die Feldlänge anzugeben:

Enter length of field <field_name> [<default>]:

Ein Beispiel, das die Verwendung der Aufforderung im Kontext veranschaulicht, finden Sie unter Angeben von Datenformaten für die Kompatibilität mithilfe von bcp.

HinweisHinweis

Nachdem Sie in einem bcp-Befehl alle Felder interaktiv angegeben haben, werden Sie aufgefordert, die Angaben zu den Feldern in einer Datei (keine XML-Datei) zu speichern. Weitere Informationen zu Formatdateien (keine XML-Dateien) finden Sie unter Grundlegendes zu Nicht-XML-Formatdateien.

Ob Sie vom bcp-Befehl zur Eingabe der Feldlänge aufgefordert werden, hängt von verschiedenen Faktoren ab, die im Folgenden aufgeführt werden:

  • Wenn Sie Datentypen ohne feste Länge kopieren und eine Präfixlänge von 0 angeben, werden Sie von bcp zur Eingabe einer Feldlänge aufgefordert.

  • Wenn bcp Daten, die nicht auf Zeichen basieren, in Zeichen konvertiert, schlägt das Dienstprogramm eine Standardfeldlänge vor, die groß genug zum Speichern der Daten ist.

  • Wenn der Dateispeichertyp Daten enthält, die nicht auf Zeichen basieren, fordert bcp nicht zur Eingabe einer Feldlänge auf. Die Daten werden in der systemeigenen Datendarstellung (systemeigenes Format) von MicrosoftSQL Server gespeichert.

Verwenden der Standardfeldlängen

Im Allgemeinen empfiehlt Microsoft, dass Sie die von bcp für die Feldlänge vorgeschlagenen Standardwerte übernehmen. Wenn Sie beim Erstellen einer Datendatei im Zeichenmodus die Standardfeldlänge verwenden, können Sie sicherstellen, dass die Daten nicht abgeschnitten werden und auch keine numerischen Überlauffehler auftreten.

Die Angabe falscher Feldlängen kann zu Problemen führen. Wenn Sie beispielsweise numerische Daten kopieren und eine Feldlänge angeben, die für die Daten nicht ausreicht, druckt das Dienstprogramm bcp eine Überlaufmeldung und kopiert die Daten nicht. Wenn Sie dagegen datetime-Daten exportieren und für die Zeichenfolge eine Feldlänge von weniger als 26 Bytes angeben, werden die Daten vom Dienstprogramm bcp ohne Fehlermeldung abgeschnitten.

Wichtiger HinweisWichtig

Bei Verwendung der Standardgrößenoption wird von SQL Server eine vollständige Zeichenfolge erwartet. In bestimmten Situationen kann die Verwendung der Standardfeldlänge zu einem Fehler des Typs "unerwartetes Dateiende" führen. Dies ist z. B. der Fall, wenn bei den Datentypen money und datetime für den datetime-Wert mm/dd/yy ohne Zeitkomponente angegeben wird und der Wert daher kürzer ist als der aus 24 Zeichen bestehende datetime-Wert im char-Format, der erwartet wird. Zur Vermeidung dieses Fehlertyps sollten Sie Feldabschlusszeichen oder Datenfelder mit fester Länge verwenden oder die Standardfeldlänge auf einen anderen Wert ändern.

Standardfeldlänge zum Speichern von Dateien im Zeichenformat

In der folgenden Tabelle werden die Standardfeldlängen für Daten aufgeführt, die als Dateien im Zeichenformat gespeichert werden. Daten, die NULL zulassen, besitzen die gleiche Länge wie Daten ohne NULL-Werte.

Datentyp

Standardlänge (Zeichen)

char

Für die Spalte definierte Länge

varchar

Für die Spalte definierte Länge

nchar

Zweifaches der für die Spalte definierten Länge

nvarchar

Zweifaches der für die Spalte definierten Länge

Text

0

ntext

0

bit

1

binary

Zweifaches der für die Spalte definierten Länge + 1

varbinary

Zweifaches der für die Spalte definierten Länge + 1

image

0

datetime

24

smalldatetime

24

float

30

real

30

int

12

bigint

19

smallint

7

tinyint

5

money

30

smallmoney

30

decimal

41*

numeric

41*

uniqueidentifier

37

timestamp

17

varchar(max)

0

varbinary(max)

0

nvarchar(max)

0

UDT

Länge der UDT-Spalte (User-defined Term)

XML

0

*Weitere Informationen zu den Datentypen decimal und numeric finden Sie unter decimal und numeric (Transact-SQL).

HinweisHinweis

Eine Spalte des Typs tinyint kann Werte von 0 bis 255 aufweisen. Zum Darstellen einer beliebigen Zahl in diesem Bereich werden maximal drei Zeichen (bei den Werten von 100 bis 255) benötigt.

Standardfeldlänge zum Speichern systemeigener Dateien

In der folgenden Tabelle werden die Standardfeldlängen für Daten aufgeführt, die als Dateien im systemeigenen Format gespeichert werden. Daten, die NULL zulassen, weisen die gleiche Länge auf wie Daten ohne NULL-Werte. Zeichendaten werden immer im Zeichenformat gespeichert.

Datentyp

Standardlänge (Zeichen)

bit

1

binary

Für die Spalte definierte Länge

varbinary

Für die Spalte definierte Länge

image

0

datetime

8

smalldatetime

4

float

8

real

4

int

4

bigint

8

smallint

2

tinyint

1

money

8

smallmoney

4

decimal1

*

numeric1

*

uniqueidentifier

16

timestamp

8

1 Weitere Informationen zu den Datentypen decimal und numeric finden Sie unter decimal und numeric (Transact-SQL).

Wenn Sie eine Datendatei erstellen, die später erneut in SQL Server geladen werden soll, und dabei den Speicherplatz auf ein Minimum begrenzen möchten, sollten Sie ein Längenpräfix mit dem Standard-Dateispeichertyp und der Standardfeldlänge verwenden. Dies gilt für jeden der vorangegangenen Fälle.