Utiliser le format caractère unicode pour importer ou exporter des données (SQL Server)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics 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.
Considérations relatives à l’utilisation du format caractère Unicode
Lors de l’utilisation du format caractère Unicode, tenez compte des points suivants :
Par défaut, l’utilitaire bcp sépare les champs de données de caractères par le caractère de tabulation et termine les enregistrements par un caractère de nouvelle ligne. Pour plus d’informations sur la spécification des terminateurs de remplacement, consultez Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server).
Les données sql_variant stockées dans un fichier de données au format caractère Unicode fonctionnent comme dans un fichier de données au 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.
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 :
N’utilisez pas de fichier de format. Un exemple de cette solution de contournement est fourni ci-dessous ; consultez Utilisation de bcp et du format caractère Unicode pour importer des données sans un fichier de format.
Utilisez le commutateur -c à la place de -w.
Réexportez les données à l’aide d’un format natif.
Utilisez BULK INSERT ou OPENROWSET. Des exemples de ces solutions de contournement sont fournis ci-dessous ; consultez Utilisation de BULK INSERT et du format caractère Unicode avec un fichier de format non XML et Utilisation d’OPENROWSET et du format caractère Unicode avec un fichier de format non XML.
Insérez manuellement le premier enregistrement dans la table de destination, puis utilisez le commutateur -F 2 pour que l’importation démarre sur le deuxième enregistrement.
Insérez manuellement le premier enregistrement factice dans le fichier de données, puis utilisez le commutateur -F 2 pour que l’importation démarre sur le deuxième enregistrement. Un exemple de cette solution de contournement est fourni ci-dessous ; consultez Utilisation de bcp et du format caractère Unicode pour importer des données avec un fichier de format non XML.
Utilisez une table de préproduction où la première colonne est un type de données caractère.
Réexportez les données et modifiez l’ordre des champs de données afin que le premier champ de données soit de type caractère. Utilisez ensuite un fichier de format pour remapper le champ de données à l’ordre réel de la table. Pour obtenir un exemple, consultez Utiliser un fichier de format pour mapper les colonnes d’une table aux champs d’un fichier de données (SQL Server).
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 | S/O | Doit utiliser un fichier de format. |
Remarque
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 suivant 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.fmt
basé 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 suivant 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 suivant 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 suivant 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;
Tâches associées
Pour utiliser des formats de données pour l'importation ou l'exportation en bloc
Importer des données au format natif et caractère à partir de versions antérieures de SQL Server
Utiliser le format caractère pour importer ou exporter des données (SQL Server)
Utiliser le format natif pour importer ou exporter des données (SQL Server)
Utiliser le format natif Unicode pour importer ou exporter des données (SQL Server)
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