Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server)

Dans le cas de champs de données de type caractère, des caractères facultatifs de fin vous permettent d'indiquer la fin de chaque champ inclus dans un fichier de données par un indicateur de fin de champ et la fin de chaque ligne par un indicateur de fin de ligne. Les caractères de fin constituent un moyen d'indiquer à des programmes en cours de lecture du fichier de données la fin d'un champ ou d'une ligne et le début du suivant.

Important

Lorsque vous utilisez le format natif ou natif Unicode, préférez les préfixes de longueur aux indicateurs de fin de champ. Les données au format natif peuvent en effet entrer en conflit avec les indicateurs de fin, car les fichiers de données sont stockés au format de données binaire interne de Microsoft SQL Server.

Caractères pris en charge en tant qu'indicateurs de fin

La commande bcp, l'instruction BULK INSERT et le fournisseur d'ensembles de lignes OPENROWSET prennent en charge un choix complet de caractères pouvant être utilisés en tant qu'indicateurs de fin de champ ou de fin de ligne et recherchent systématiquement la première occurrence de chacun de ces indicateurs. Le tableau ci-dessous répertorie les caractères pris en charge pour les terminateurs.

Caractère de terminaison

Indiqué par

Tabulation

\t

Il s'agit de l'indicateur de fin de champ par défaut.

Caractère de saut de ligne

\n

Il s'agit de l'indicateur de fin de ligne par défaut.

Retour chariot/saut de ligne

\r

Barre oblique inverse1

\\

Indicateur de fin NULL (indicateur de fin non visible)2

\0

Tout caractère imprimable (les caractères de contrôle ne le sont pas, sauf les valeurs NULL, tabulation, saut de ligne et retour chariot)

(*, A, t, l, etc.)

Une chaîne de 10 caractères imprimables maximum, y compris certains ou tous les indicateurs de fin énumérés précédemment

(**\t**, fin, !!!!!!!!!!, \t—\n, etc.)

1 Seuls les caractères t, n, r, 0, et '\0' fonctionnent avec le caractère d'échappement Barre oblique inverse pour générer un caractère de contrôle.

2 Bien que le caractère de contrôle null (\0) ne soit pas visible à l'impression, il constitue bel et bien un caractère à part dans le fichier de données. En d'autres termes, utiliser ce caractère en tant qu'indicateur de fin de champ ou de fin de ligne ne revient pas à simplement omettre cet indicateur de fin.

Important

Si un caractère correspond à un caractère indicateur de fin dans la continuité des données, il est alors interprété en tant que tel et non en tant que donnée ; les données suivant ce caractère sont donc considérées comme faisant partie du champ ou de l'enregistrement suivant. Par conséquent, choisissez vos indicateurs consciencieusement afin qu'ils n'apparaissent jamais au sein de vos données. Par exemple, il n'est pas judicieux de choisir un indicateur de fin de champ de substitut faible pour un indicateur de fin de champ si les données contiennent ce substitut faible.

Manipulation des indicateurs de fin de ligne

L'indicateur de fin de ligne peut être le même que celui employé en tant qu'indicateur du dernier champ. Cependant, un indicateur de fin de ligne distinct s'avère généralement plus utile. Par exemple, afin d'obtenir en sortie des tabulations, marquez la fin du dernier champ de chaque ligne par le caractère de saut de ligne (\n) et la fin de tous les autres champs par le caractère de tabulation (\t). Pour placer chaque enregistrement de données dans une ligne séparée dans le fichier de données, attribuez la combinaison de caractères \r\n à l'indicateur de fin de ligne.

[!REMARQUE]

Lorsque vous utilisez la commande bcp de manière interactive et que vous spécifiez le caractère de saut de ligne \n en tant qu'indicateur de fin de ligne, bcp fait précéder ce caractère du retour chariot \r automatiquement, modifiant ainsi l'indicateur de fin de ligne en \r\n.

Spécification d'indicateurs pour l'exportation en bloc

Si vous procédez à une exportation en bloc des données de type char ou nchar, mais que vous voulez utiliser un indicateur de fin autre que celui défini par défaut, vous devez alors indiquer ce dernier à la commande bcp. Vous pouvez le spécifier de l'une des façons suivantes :

  • Grâce à un fichier de format précisant l'indicateur de fin pour chaque champ.

    [!REMARQUE]

    Pour plus d'informations sur l'utilisation des fichiers de format, consultez Fichiers de format pour l'importation ou l'exportation de données (SQL Server).

  • Sans avoir recours à un fichier de format, les options suivantes sont aussi à votre disposition :

    • Utilisation du commutateur -t afin de préciser l'indicateur de fin de ligne pour tous les champs à l'exception du dernier champ de la ligne et utilisation du commutateur -r pour préciser un indicateur de fin de ligne.

    • Utilisation d'un commutateur de format caractère (-c ou -w) sans le commutateur -t, qui définit l'indicateur de fin de champ sur la tabulation, \t. Cette option est équivalente à la spécification de -t\t.

      [!REMARQUE]

      Si vous ajoutez le commutateur -n (correspondant aux données natives) ou -N (format natif Unicode), les indicateurs de fin ne sont alors pas insérés.

    • Si une commande bcp interactive contient l'option in ou out sans le commutateur du fichier de format (-f) ou celui du fichier de données (-n, -c, -w ou -N) mais que vous n'avez pas non plus précisé la longueur du préfixe et la longueur de champ, la commande vous invite alors à saisir l'indicateur de fin de champ de chaque champ, tout en vous proposant par défaut de ne pas en spécifier :

      Enter field terminator [none]:

      généralement, cette valeur par défaut convient. Dans le cas des champs de données de type char ou nchar, consultez cependant la sous-section « Instructions pour l'utilisation d'indicateurs de fin ». 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).

Instructions pour l'utilisation d'indicateurs de fin

Dans certains cas, un indicateur de fin s'avère utile pour les champs de données de type char ou nchar. Par exemple :

  • pour une colonne de données qui contient une valeur Null dans un fichier de données qui sera importé dans un programme qui ne comprend pas les informations de longueur de préfixe ;

    Toute colonne de données qui contient une valeur Null est considérée de longueur variable. En l'absence de longueurs de préfixe, un indicateur de fin est nécessaire pour identifier la fin d'un champ Null et garantir que les données sont correctement interprétées.

  • pour une longue colonne de longueur fixe dont l'espace n'est utilisé que partiellement par de nombreuses lignes.

    Dans cette situation, la spécification d'un indicateur de fin réduit l'espace de stockage et permet au champ d'être traité comme un champ de longueur variable.

Exemples

Cette commande d'exportation en bloc exporte les données de la table AdventureWorks HumanResources.Department vers le fichier de données Department-c-t.txt au format de caractères, utilisant la virgule comme indicateur de fin de champ et le saut de ligne (\n) comme indicateur de fin de ligne.

La commande bcp contient les commutateurs suivants.

Commutateur

Description

-c

Chargement des champs de données en tant que données sous forme de caractères.

-t ,

Virgule (,) servant d'indicateur de fin de champ.

-r \n

Indicateur de fin de ligne en tant que caractère de saut de ligne. Il s'agit de l'indicateur par défaut ; le préciser est donc facultatif.

-T

L'utilitaire bcp se connecte à SQL Server à l'aide d'une connexion approuvée à sécurité intégrée. Si -T n'est pas spécifié, vous devez indiquer -U et -P pour pouvoir vous connecter.

Pour plus d'informations, consultez Utilitaire bcp.

À l'invite de commandes Windows Microsoft, entrez :

bcp AdventureWorks.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T

Ceci entraîne la création de Department-c-t.txt contenant 16 enregistrements de 4 champs chacun. Les champs sont séparés par une virgule.

Spécification des terminateurs pour l'importation en bloc

Lorsque vous procédez à une importation en bloc de données de type char ou nchar, la commande prévue à cet effet doit reconnaître les indicateurs de fin utilisés dans le fichier de données. Voici comment les indicateurs de fin doivent être précisés selon la commande d'importation en bloc :

  • bcp

    Spécifier des terminateurs pour une opération d'importation revient à utiliser la même syntaxe que pour une opération d'exportation. Pour plus d'informations, consultez la section « Spécification des terminateurs pour l'exportation en bloc », plus haut dans cette rubrique.

  • BULK INSERT

    Les terminateurs peuvent être spécifiés pour chaque champ d'un fichier de format ou pour le fichier de données tout entier grâce aux qualificateurs répertoriés dans le tableau suivant.

    Qualificateur

    Description

    FIELDTERMINATOR = 'field_terminator'

    Spécifie l'indicateur de fin de champ à utiliser pour les fichiers de données de type caractère et de type caractère Unicode.

    Par défaut, c'est le caractère de tabulation (\t).

    ROWTERMINATOR = 'row_terminator'

    Spécifie l'indicateur de fin de ligne à utiliser pour les fichiers de données de type caractère et de type caractère Unicode.

    Par défaut, il s'agit du caractère de saut de ligne (\n).

    Pour plus d'informations, consultez BULK INSERT (Transact-SQL).

  • INSERT ... SELECT * FROM OPENROWSET(BULK...)

    Dans le cas du fournisseur de l'ensemble de lignes en bloc OPENROWSET, les indicateurs de fin ne peuvent être précisés que dans le fichier de format (requis sauf dans le cas de types de données incluses dans un objet volumineux). Si un fichier de données de type caractère utilise un indicateur de fin qui ne soit pas un indicateur par défaut, ce dernier doit alors être défini dans le fichier de format. Pour plus d'informations, consultez Créer un fichier de format (SQL Server) et Utiliser un fichier de format pour importer des données en bloc (SQL Server).

    Pour plus d'informations sur la clause OPENROWSET BULK, consultez OPENROWSET (Transact-SQL).

Exemples

Les exemples de cette section importent en bloc des données de type caractère du fichier de données Department-c-t.txt créé dans l'exemple précédent dans la table myDepartment se trouvant dans l'exemple de base de données AdventureWorks2012 . Avant de commencer, vous devez créer cette base de données. Pour créer cette table, sous le schéma dbo, dans l'Éditeur de requêtes SQL Server Management Studio, exécutez le code suivant :

USE AdventureWorks;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment 
(DepartmentID smallint,
Name nvarchar(50),
GroupName nvarchar(50) NULL,
ModifiedDate datetime not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())
);
GO

A.Utilisation de bcp pour spécifier de façon interactive les terminateurs

L'exemple suivant importe en bloc le fichier de données Department-c-t.txt par le biais de la commande bcp. Les commutateurs de cette commande sont identiques à ceux de la commande d'exportation en bloc. Pour plus d'informations, consultez la section « Spécification des terminateurs pour l'exportation en bloc », plus haut dans cette rubrique.

À l'invite de commandes Windows, entrez :

bcp AdventureWorks..myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T

B.Utilisation de BULK INSERT pour spécifier de façon interactive les terminateurs

L'exemple suivant importe en bloc le fichier de données Department-c-t.txt par le biais de l'instruction BULK INSERT en utilisant les qualificateurs répertoriés dans le tableau suivant.

Option

Attribut

DATAFILETYPE = 'char'

Chargement des champs de données en tant que données sous forme de caractères.

FIELDTERMINATOR = ','

Virgule (,) servant d'indicateur de fin de champ.

ROWTERMINATOR = '\n'

Indicateur de fin de ligne en tant que caractère de saut de ligne.

Dans l'Éditeur de requête SQL Server Management Studio, exécutez le code suivant :

USE AdventureWorks;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO

Voir aussi

Référence

Utilitaire bcp

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

Concepts

Spécifier la longueur des champs au moyen de bcp (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)