Spécifier la longueur des champs au moyen de bcp (SQL Server)
La longueur de champ indique le nombre maximal de caractères nécessaires pour représenter les données au format caractères. 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 bcp interactive contient l'option in ou out sans commutateur de fichier de format (-f) ou sans commutateur de format de données (-n, -c, -w ou -N), la commande demande la longueur de chaque champ de données, comme suit :
Enter length of field <field_name> [<default>]:
Pour obtenir un exemple de cette invite dans son contexte, consultez Spécifier des formats de données pour la compatibilité lors de l'utilisation de bcp (SQL Server).
[!REMARQUE]
Après avoir indiqué de façon interactive tous les champs dans la commande bcp, cette dernière vous invite enfin à sauvegarder vos réponses dans un fichier de format autre que XML pour chacun des champs fournis. Pour plus d'informations sur les fichiers de format non XML, consultez Fichiers de format non-XML (SQL Server).
Plusieurs facteurs déterminent si une commande bcp vous demande les longueurs des champs :
Lorsque vous copiez des types de 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 le 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 Microsoft SQL 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/dd/yy 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.
Voir aussi
Référence
Types de données (Transact-SQL)
Concepts
Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server)
Spécifier une longueur de préfixe dans des fichiers de données à l'aide de bcp (SQL Server)
Spécifier le type de stockage de fichiers à l'aide de bcp (SQL Server)
Spécifier la longueur des champs au moyen de bcp (SQL Server)