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

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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.

Dans cette rubrique :
Considérations relatives à l’utilisation du format caractère Unicode
Considérations spéciales relatives à l’utilisation du format caractère Unicode, de bcp et d’un fichier de format
Options de commande du format caractère Unicode
Exemples de conditions de test
 ● Échantillon de table
 ● Échantillon de fichier de format non XML
Exemples
 ● Utilisation de bcp et du format de caractères Unicode pour exporter des données
 ● Utilisation de bcp et du format de caractères Unicode pour importer des données sans un fichier de format
 ● Utilisation de bcp et du format de caractères Unicode pour importer des données avec un fichier de format non XML
 ● Utilisation de BULK INSERT et du format de caractères Unicode sans un fichier de format
 ● Utilisation de BULK INSERT et du format caractères Unicode avec un fichier de format non XML
 ● Utilisation d’OPENROWSET et du format caractères Unicode avec un fichier de format non XML
Tâches associées

Considérations relatives à l’utilisation du format caractère Unicode

Lors de l’utilisation du format caractère Unicode, tenez compte des points suivants :

Considérations spéciales relatives à l’utilisation du format caractère Unicode, de bcp et d’un fichier de format

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 marques d’ordre d’octet, précisant si l’octet de poids fort est enregistré en premier ou en dernier dans le fichier. L’utilitaire bcp peut mal interpréter les marques d’ordre d’octet et provoquer l’échec d’une partie du processus d’importation ; vous pouvez recevoir un message d’erreur similaire à ce qui suit :

Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification

Les marques d’ordre d’octet peuvent être mal interprétées dans les conditions suivantes :

  • L’utilitaire bcp est utilisé et le commutateur -w est utilisé pour indiquer le caractère Unicode

  • Un fichier de format est utilisé

  • Le premier champ dans le fichier de données n’est pas de type caractère

Déterminez si l’une des solutions suivantes peut être disponible pour votre situation spécifique :

Options de commande du format caractère Unicode

Vous pouvez importer des données au format caractère Unicode dans une table à l’aide de la commande bcp, 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 l’instruction. 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 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.
OPENROWSET N/A Doit utiliser un fichier de format.

Notes

Vous pouvez également spécifier le formatage par 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 de conditions de test

Les exemples de cette rubrique sont fondés sur la table et le fichier de format définis ci-dessous.

Exemple de table

Le script ci-dessous crée une base de données test, une table nommée myWidechar et remplit la table avec des valeurs initiales. Exécutez l’instruction Transact-SQL suivante dans Microsoft SQL Server Management Studio (SSMS) :

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myWidechar ( 
	PersonID smallint NOT NULL,
	FirstName nvarchar(25) NOT NULL,
	LastName nvarchar(30) NOT NULL,
	BirthDate date,
	AnnualSalary money
);

-- Populate table
INSERT TestDatabase.dbo.myWidechar
VALUES 
(1, N'ϴAnthony', N'Grosse', '02-23-1980', 65000.00),
(2, N'❤Alica', N'Fatnowna', '11-14-1963', 45000.00),
(3, N'☎Stella', N'Rossenhain', '03-02-1992', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myWidechar;

Exemple de fichier de format non XML

SQL Server prend en charge deux types de fichier de format : format XML et format non XML. Le format non XML est le format d’origine pris en charge dans les versions précédentes de SQL Server. Veuillez consulter Fichiers de format non XML (SQL Server) pour obtenir des informations détaillées. La commande suivante utilise l’utilitaire bcp pour générer un fichier de format non xml myWidechar.fmtbasé sur le schéma de myWidechar. Pour utiliser une commande bcp pour créer un fichier de format, spécifiez l’argument format et utilisez nul à la place d’un chemin de fichier de données. L’option format nécessite également l’option -f . De plus, pour cet exemple, le qualificateur c est utilisé pour spécifier les données de type caractère et T est utilisé pour spécifier une connexion approuvée à l’aide de la sécurité intégrée. À partir d’une invite de commandes, entrez les commandes suivantes :

bcp TestDatabase.dbo.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w

REM Review file
Notepad D:\BCP\myWidechar.fmt

Important

Vérifiez que votre fichier de format non XML se termine par un retour charriot\saut de ligne. Sinon, vous recevez probablement le message d’erreur suivant :

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Exemples

Les exemples ci-dessous utilisent la base de données et les fichiers de format créés ci-dessus.

Utilisation de bcp et du format caractère Unicode pour exporter des données

Commutateur -w et commande OUT . Remarque : Le fichier de données créé dans cet exemple est utilisé dans tous les exemples suivants. À partir d’une invite de commandes, entrez les commandes suivantes :

bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

REM Review results
NOTEPAD D:\BCP\myWidechar.bcp

Utilisation de bcp et du format caractère Unicode pour importer des données sans un fichier de format

Commutateur -w et commande IN . À partir d’une invite de commandes, entrez les commandes suivantes :

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"

REM Import data
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -T -w

REM Review results is SSMS

Utilisation de bcp et du format caractère Unicode pour importer des données avec un fichier de format non XML

Commutateurs -w et -f switches et IN commet. Vous devez utiliser une solution de contournement dans la mesure où cet exemple implique bcp, un fichier de format, le caractère Unicode, et le premier champ de données dans le fichier de données n’est pas de type caractère. Consultez Considérations spéciales relatives à l’utilisation du format caractère Unicode, de bcp et d’un fichier de formatci-dessus. Le fichier de données myWidechar.bcp est modifié par l’ajout d’un enregistrement supplémentaire « factice » qui est ensuite ignoré avec le commutateur -F 2.

À l’invite de commandes, entrez les commandes suivantes et suivez la procédure de modification :

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"

REM Open data file
Notepad D:\BCP\myWidechar.bcp
REM Copy first record and then paste as new first record.  This additional record is the "dummy" record.
REM Close file.

REM Import data instructing bcp to skip dummy record with the -F 2 switch.
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -f D:\BCP\myWidechar.fmt -T -F 2

REM Review results is SSMS

REM Return data file to original state for usage in other examples
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

Utilisation de BULK INSERT et du format caractère Unicode sans un fichier de format

ArgumentDATAFILETYPE . Exécutez l’instruction Transact-SQL suivante dans Microsoft SQL Server Management Studio (SSMS) :

TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar
	FROM 'D:\BCP\myWidechar.bcp'
	WITH (
		DATAFILETYPE = 'widechar'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;

Utilisation de BULK INSERT et du format caractère Unicode avec un fichier de format non XML

ArgumentFORMATFILE . Exécutez l’instruction Transact-SQL suivante dans Microsoft SQL Server Management Studio (SSMS) :

TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar
   FROM 'D:\BCP\myWidechar.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myWidechar.fmt'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;

Utilisation d’OPENROWSET et du format caractère Unicode avec un fichier de format non XML

ArgumentFORMATFILE . Exécutez l’instruction Transact-SQL suivante dans Microsoft SQL Server Management Studio (SSMS) :

TRUNCATE TABLE TestDatabase.dbo.myWidechar;  -- for testing
INSERT INTO TestDatabase.dbo.myWidechar
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myWidechar.bcp', 
		FORMATFILE = 'D:\BCP\myWidechar.fmt'  
		) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;

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

Voir aussi

Utilitaire bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Types de données (Transact-SQL)
Prise en charge d'Unicode et du classement