Utiliser le format caractère 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 est recommandé pour l'exportation en bloc de données dans un fichier texte qui doit être utilisé dans un autre programme, ou pour l'importation en bloc de données à partir d'un fichier texte généré par un autre programme.

Le format caractère utilise le format de données de caractères pour toutes les colonnes. L'enregistrement d'informations au format caractère est utile lorsque les données sont exploitées par un autre programme, par exemple un tableur, ou lorsque les données doivent être copiées dans une instance de SQL Server à partir d'une base de données issue d'un autre éditeur comme Oracle.

Notes

Lors du transfert en bloc de données entre des instances de Microsoft SQL Server , si le fichier de données contient des données caractères Unicode mais aucun caractère étendu ni jeu de caractères codés sur deux octets (DBCS), utilisez le format de caractères Unicode. Pour plus d’informations, consultez Utiliser le format caractère Unicode pour importer ou exporter des données (SQL Server).

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

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

Lors de l'utilisation du format caractère, 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).

  • Par défaut, avant l'exportation ou l'importation en bloc de données en mode caractère, les conversions suivantes sont réalisées :

    Sens de l'opération en bloc Conversion
    Exporter Convertit les données en représentation caractère. Si la demande est faite explicitement, les données sont converties vers la page de codes demandée pour les colonnes de caractères. Si aucune page de codes n'est spécifiée, les données de caractères sont converties à l'aide de la page de codes OEM de l'ordinateur client.
    Importer Convertit les données de caractères en représentation native si nécessaire, puis traduit les données de caractères de la page de codes du client vers la page de codes des colonnes cibles.
  • Pour éviter la perte de caractères étendus pendant la conversion, utilisez le format de caractères Unicode ou spécifiez une page de codes.

  • Les données sql_variant stockées dans un fichier au format caractère sont enregistrées sans métadonnées. Chaque valeur de données est convertie au format char suivant les règles de conversion implicite des données. Importées dans une colonne sql_variant , les données sont importées au format char. Importées dans une colonne dont le type de données est différent de sql_variant, les données sont converties à partir du format char à l’aide de la conversion implicite. Pour plus d’informations sur la conversion de données, consultez Conversion de types de données (moteur de base de données).

  • L’utilitaire bcp exporte les valeurs de type money sous forme de fichiers de données au format caractère, avec quatre chiffres après le séparateur décimal et sans symboles de groupement de chiffres comme les espaces de séparation. Par exemple, une colonne money contenant la valeur 1 234 567,123456 est exportée en bloc dans un fichier de données en tant que chaîne de caractères 1234567,1235.

Options de commande pour le format caractère

Vous pouvez importer des données au format caractère dans une table à l’aide de l’utilitaire 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 est pris en charge par les options de commande suivantes :

Commande Option Description
bcp -c Force l’utilitaire bcp à utiliser les données de type caractère.*
BULK INSERT DATAFILETYPE ='char' Utilise le format caractère lors de l'importation en bloc des données.
OPENROWSET N/A Doit utiliser un fichier de format.

*Pour charger les données caractères ( -c) dans un format compatible avec les versions antérieures des clients SQL Server , utilisez le commutateur -V . Pour plus d’informations, consultez Importer des données au format natif et caractère à partir de versions antérieures de SQL Server.

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 myChar 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.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

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

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

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 myChar.fmtbasé sur le schéma de myChar. 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 la commande suivante :

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.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 pour exporter des données

Commutateur -c 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 la commande suivante :

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

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

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

Commutateur -c et commande IN . À partir d'une invite de commandes, entrez la commande suivante :

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

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

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

Commutateurs -c et -f switches et IN commet. À partir d'une invite de commandes, entrez la commande suivante :

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

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

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

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

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

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

Utilisation de BULK INSERT et du format caractère 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.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myChar.fmt'
		);

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

Utilisation d’OPENROWSET et du format caractère 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.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myChar.bcp', 
		FORMATFILE = 'D:\BCP\myChar.fmt'  
		) AS t1;

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

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)
Importer des données au format natif et caractère à partir de versions antérieures de SQL Server