Utiliser le format caractère Unicode pour importer ou exporter des données (SQL Server)

Le format caractère Unicode est recommandé pour le transfert en bloc de données entre plusieurs instances de SQL Server à l'aide d'un fichier de données qui contient des caractères étendus ou DBCS. Le format de données caractère Unicode permet d'exporter des données depuis un serveur à l'aide d'une page de codes différente de celle utilisée par le client qui effectue l'opération. Dans ces cas, l'utilisation du format caractère Unicode présente les avantages suivants :

  • Si les données sources et de destination sont de types de données Unicode, l'utilisation du format caractère Unicode conserve toutes les données caractère.

  • Si les données sources et de destination ne sont pas de types de données Unicode, l'utilisation du format caractère Unicode réduit au minimum la perte de caractères étendus dans les données sources qui ne peuvent pas être représentées sur la destination.

Les fichiers de données de format caractère Unicode respectent les conventions pour les fichiers Unicode. Les deux premiers octets du fichier sont des nombres hexadécimaux (0xFFFE). Ces octets sont utilisés comme indicateurs de l'ordre des octets, précisant si l'octet de poids fort est enregistré en premier ou en dernier dans le fichier.

Important

Pour qu'un fichier de format fonctionne avec un fichier de données de caractères Unicode, tous les champs d'entrée doivent être des chaînes de texte Unicode (autrement dit, des chaînes Unicode de taille fixe ou terminées par un caractère).

Les données sql_variant stockées dans un fichier de données de format caractère Unicode fonctionnent comme dans un fichier de données de format caractère, à la différence que les données sont stockées en tant que données nchar et non pas char. Pour plus d'informations sur le format caractère, consultez Prise en charge d'Unicode et du classement

Pour utiliser un indicateur de fin de champ ou de ligne autre que l'indicateur par défaut du format caractère Unicode, consultez Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server).

Options de commande du format caractère Unicode

Vous pouvez importer des données de format caractère Unicode dans une table à l'aide de la commande bcp ou des instructions BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK...). Si vous utilisez une commande bcp ou une instruction BULK INSERT, vous pouvez spécifier le format de données dans la ligne de commande. Pour une instruction INSERT ... SELECT * FROM OPENROWSET(BULK...), vous devez spécifier le format de données dans un fichier de format.

Le format caractère Unicode est pris en charge par les options de ligne de commande suivantes :

Commande

Option

Description

bcp

-w

Utilise le format caractère Unicode.

BULK INSERT

DATAFILETYPE = 'widechar'

Utilise le format caractère Unicode lors de l'importation de données en bloc.

Pour plus d'informations, consultez Utilitaire bcp, BULK INSERT (Transact-SQL) ou OPENROWSET (Transact-SQL).

[!REMARQUE]

Vous avez également la possibilité de spécifier la mise en forme au niveau de chaque champ dans un fichier de format. Pour plus d'informations, consultez Fichiers de format pour l'importation ou l'exportation de données (SQL Server).

Exemples

Les exemples suivants montrent comment exporter en bloc des données de caractères Unicode à l'aide de la commande bcp et importer en bloc les mêmes données à l'aide de l'instruction BULK INSERT.

Exemple de table

Une table nommée myTestUniCharData doit être créée dans l'exemple de base de données AdventureWorks2012 sous le schéma dbo. Avant d'exécuter les exemples, vous devez créer cette table. Pour créer cette table, dans l'éditeur de requêtes SQL Server Management Studio, exécutez le code suivant :

USE AdventureWorks2012;
GO
CREATE TABLE myTestUniCharData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

Pour remplir cette table et visualiser le contenu obtenu, exécutez les instructions suivantes :

INSERT INTO myTestUniCharData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3') 
        ,(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestUniCharData;

Utilisation de la commande bcp pour exporter en bloc des données caractère Unicode

Pour exporter des données de la table vers le fichier de données, utilisez bcp avec l'option out et les qualificateurs suivants :

Qualificateurs

Description

-w

Spécifie le format caractère Unicode.

-t ,

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

[!REMARQUE]

L'indicateur de fin de champ par défaut est le caractère Unicode de tabulation (\t). Pour plus d'informations, consultez Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server).

-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.

L'exemple suivant exporte en bloc des données au format de caractères Unicode à partir de la table myTestUniCharData dans un nouveau fichier de données nommé myTestUniCharData-w.Dat qui utilise la virgule (,) comme marque de fin de champ. À l'invite de commandes Microsoft Windows, entrez :

bcp AdventureWorks2012..myTestUniCharData out C:\myTestUniCharData-w.Dat -w -t, -T

Utilisation de l'instruction BULK INSERT pour importer en bloc des données caractère Unicode

Dans l'exemple ci-dessous, l'instruction BULK INSERT est employée pour importer les données du fichier de données myTestUniCharData-w.Dat dans la table myTestUniCharData. La marque de fin de champ autre que celle par défaut (,) doit être déclarée dans l'instruction. Dans l'Éditeur de requête SQL Server Management Studio, exécutez :

USE AdventureWorks2012;
GO
BULK INSERT myTestUniCharData 
   FROM 'C:\myTestUniCharData-w.Dat' 
   WITH (
      DATAFILETYPE='widechar',
      FIELDTERMINATOR=','
   ); 
GO
SELECT Col1,Col2,Col3 FROM myTestUniCharData;
GO

Tâches associées

Pour utiliser des formats de données pour l'importation ou l'exportation en bloc

Voir aussi

Référence

Utilitaire bcp

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

Types de données (Transact-SQL)

Concepts

Prise en charge d'Unicode et du classement