Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
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 de caractères Unicode permet l’exportation des données à partir d’un serveur à l’aide d’une page de codes qui diffère de la page de codes 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 des types de données Unicode, l’utilisation du format de caractères Unicode réduit la perte de caractères étendus dans les données sources qui ne peuvent pas être représentées au niveau de la destination.
Considérations relatives à l’utilisation du format caractère Unicode
Lorsque vous utilisez le format de caractère Unicode, tenez compte des éléments 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 façon de spécifier d’autres terminateurs, consultez Spécifier des terminateurs de champ et 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 de caractères, consultez la prise en charge du tri et d'Unicode.
Considérations spéciales relatives à l'utilisation du format de 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 le boM et provoquer l’échec de la partie de votre 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
Le BOM peut être mal interprété dans les conditions suivantes :
L’utilitaire bcp est utilisé et le
-wcommutateur est utilisé pour indiquer le caractère UnicodeUn 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 de contournement 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 dans le document Utilisation du format de caractères bcp et Unicode pour importer des données sans fichier de format.
Utilisez le
-ccommutateur au lieu de-w,Réexportez les données à l’aide d’un format natif.
Utilisez BULK INSERT (Transact-SQL) ou OPENROWSET (Transact-SQL). Des exemples de ces solutions de contournement sont fournis dans les sections Utilisation de BULK INSERT et du format de caractères Unicode avec un fichier de format non-XML et Utilisation de OPENROWSET et du format de caractères Unicode avec un fichier de format non-XML.
Insérez manuellement le premier enregistrement dans la table de destination, puis utilisez
-F 2le commutateur pour que l’importation démarre sur le deuxième enregistrement,Insérez manuellement un premier enregistrement factice dans le fichier de données, puis utilisez
-F 2le commutateur pour que l’importation démarre sur le deuxième enregistrement. Un exemple de cette solution de contournement est fourni dans la section Utilisation de bcp et du format de 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 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 des colonnes de table à des champs de fichier de données (SQL Server) .
Options de commande pour le format de caractère Unicode
Vous pouvez importer des données de format caractère Unicode dans une table à l’aide de bcp, BULK INSERT ou OPENROWSET. Pour une commande bcp ou une instruction BULK INSERT , vous pouvez spécifier le format de données dans l’instruction. Pour une instruction OPENROWSET , 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 | Choix | Descriptif |
|---|---|---|
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. |
Remarque
Vous pouvez également spécifier le formatage par champ dans un fichier de format. Pour plus d’informations, consultez les fichiers de format pour importer ou exporter des données (SQL Server).
Exemples de conditions de test
Les exemples de cet article sont basés sur le tableau et le fichier de format suivants.
Exemple de table
Le script suivant crée une base de données de test, une table nommée myWidechar et remplit la table avec certaines 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. Pour plus d’informations, consultez Utiliser des fichiers de format non XML (SQL Server).
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 au lieu d’un chemin d’accès au fichier de données. L’option de format nécessite également l’option -f. En outre, pour cet exemple, le qualificateur c est utilisé pour spécifier des données de caractères 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 pouvez recevoir 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 suivants utilisent la base de données et les fichiers de format créés précédemment.
Utiliser le format de caractère bcp et Unicode pour exporter des données
-w interrupteur et OUT commande. 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
Utiliser le format de caractères bcp et Unicode pour importer des données sans fichier de format
-w interrupteur et IN commande. À 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
Utiliser le format de caractère bcp et Unicode pour importer des données avec un fichier de format non XML
Commutateurs -w et -f et commande IN. Une solution de contournement doit être utilisée, car cet exemple implique bcp, un fichier de format, un caractère Unicode et le premier champ de données du fichier de données n’est pas un caractère. Consultez considérations spéciales relatives à l’utilisation du format caractère Unicode, bcp et un fichier de format plus haut dans l’article. Le fichier myWidechar.bcp de données est modifié en ajoutant un enregistrement supplémentaire en tant qu’enregistrement « factice », qui est ensuite ignoré avec le -F 2 commutateur.
À 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
Utiliser BULK INSERT et le format de caractère Unicode sans fichier de format
DATAFILETYPE argument. 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;
Utiliser BULK INSERT et le format de caractère Unicode avec un fichier de format non XML
FORMATFILE argument. 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;
Utiliser OPENROWSET et le format de caractère Unicode avec un fichier de format non XML
FORMATFILE argument. 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 de format natif et de 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)