Spécification de la longueur des champs au moyen de bcp

La longueur de champ indique le nombre maximal de caractères nécessaires pour représenter les données au format caractère. La longueur de champ est déjà connue si les données sont enregistrées au format natif. Par exemple, les données de type int occupent 4 octets. Si vous indiquez 0 pour la longueur du préfixe, la commande bcp vous demande la longueur des champs, les longueurs par défaut des champs et l'influence de la longueur des champs sur le stockage des données dans des fichiers de données qui contiennent des données de type char.

Invite bcp pour la longueur des champs

Si une commande interactive bcp contient l'option in ou out sans format de commutateur de format de fichier (-f) ou de format de données (-n, -c, -w ou -N), la commande demande la longueur de chaque champ de donnée comme suit :

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

Pour obtenir un exemple de cette invite dans son contexte, consultez Spécification de formats de données pour la compatibilité à l'aide de bcp.

[!REMARQUE]

Après avoir spécifié interactivement tous les champs d'une commande bcp, celle-ci vous demande d'enregistrer vos réponses dans un fichier qui n'est pas au format XML. Pour plus d'informations sur les fichiers qui ne sont pas au format XML, consultez Description des fichiers de format non XML.

Plusieurs facteurs déterminent si une commande bcp vous demande les longueurs des champs :

  • Lorsque vous copiez des données dont la longueur n'est pas constante et si vous spécifiez un préfixe de longueur nulle (0), la commande bcp demande la longueur du champ.

  • Lors de la conversion de données de type non caractère en type caractère, la commande bcp suggère une longueur de champ par défaut suffisamment importante pour stocker les données.

  • Si un type de stockage de fichier n'est pas de type caractère, la commande bcp ne demande pas de longueur de champ. Les données sont enregistrées dans le format natif MicrosoftSQL Server.

Utilisation des longueurs de champs par défaut

Microsoft recommande généralement d'accepter les longueurs de champs par défaut suggérées par la commande bcp. Lors de la création d'un fichier de données en mode caractère, l'utilisation de la longueur de champ par défaut garantit que les données ne sont pas tronquées et que des erreurs de dépassement de capacité numérique ne se produiront pas.

Des problèmes peuvent se produire si vous spécifiez une longueur de champ incorrecte. Par exemple, si cous copiez des données numériques et si vous spécifiez une longueur de champ trop faible pour ces données, l'utilitaire bcp affiche un message de dépassement de capacité et ne copie pas les données. De même, si vous exportez des données de type datetime et spécifiez une longueur de champ inférieure à 26 octets pour la chaîne de caractères, l'utilitaire bcp tronque les données sans message d'erreur.

Important

Lorsque vous utilisez l'option de taille par défaut, SQL Server s'attend à lire une chaîne complète. Dans certains cas, l'utilisation de la longueur de champ par défaut peut entraîner l'erreur « Fin de fichier inattendue ». Cette erreur se produit généralement avec les types de données money et datetime lorsque seule une partie du champ attendu se trouve dans le fichier de données ; c'est le cas, par exemple, lorsqu'une valeur datetime de type mm/jj/aa est spécifiée sans la composante d'heure. Elle est donc plus courte que la longueur de 24 caractères attendue pour une valeur datetime au format char. Pour éviter ce type d'erreur, utilisez des marques de fin de champ ou des champs de données de longueur fixe, ou modifiez la longueur par défaut du champ en spécifiant une autre valeur.

Longueur par défaut des champs pour le stockage de fichiers au format caractère

Le tableau ci-dessous répertorie les longueurs par défaut des champs à enregistrer dans des fichiers de type caractère. Les données pouvant être de type NULL sont de même longueur que les données de type non NULL.

Type de données

Longueur par défaut (en caractères)

char

Longueur définie pour la colonne

varchar

Longueur définie pour la colonne

nchar

Le double de la longueur définie pour la colonne

nvarchar

Le double de la longueur définie pour la colonne

Text

0

ntext

0

bit

1

binary

Le double de la longueur définie pour la colonne + 1

varbinary

Le double de la longueur définie pour la colonne + 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

Longueur de la colonne d'un terme défini par l'utilisateur (UDT)

XML

0

*Pour plus d'informations sur les types de données decimal et numeric, consultez decimal et numeric (Transact-SQL).

[!REMARQUE]

Une colonne de type tinyint peut posséder des valeurs comprises entre 0 et 255. Le nombre maximal de caractères nécessaires à la représentation de tout nombre compris dans cet intervalle est de trois (représentant les valeurs comprises entre 100 et 255).

Longueur par défaut des champs pour le stockage de fichiers au format natif

Le tableau ci-dessous répertorie les longueurs par défaut des champs à enregistrer dans des fichiers au format natif. Les données pouvant être de type NULL sont de même longueur que les données de type non NULL. Les données de type caractère sont toujours enregistrées au format caractère.

Type de données

Longueur par défaut (en caractères)

bit

1

binary

Longueur définie pour la colonne

varbinary

Longueur définie pour la colonne

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 Pour plus d'informations sur les types de données decimal et numeric, consultez decimal et numeric (Transact-SQL).

Dans tous les cas précédents, pour créer un fichier de données pour un chargement ultérieur dans SQL Server et faire en sorte que l'espace de stockage soit minimal, utilisez un préfixe de longueur avec le type de stockage de fichier et la longueur du champ par défaut.