Partage via


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)Warehouse dans Microsoft Fabric

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.

Remarque

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 de caractères Unicode pour importer ou exporter des données (SQL Server).

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

Lorsque vous utilisez le format de caractère, 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 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
    Export 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, le cas échéant, et convertit les données de caractères de la page de codes du client en page de codes d’une ou plusieurs 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 type 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 argent qui contient la valeur 1,234,567.123456 est exportée en bloc vers un fichier de données en tant que chaîne de caractères 1234567.1235.

Options de commande pour le format de caractère

Vous pouvez importer des données au format texte dans une table à l’aide de bcp, BULK INSERT (Transact-SQL), ou OPENROWSET (Transact-SQL). Pour une instruction bcp ou BULK INSERT (Transact-SQL), vous pouvez spécifier le format de données dans l’instruction. Pour une instruction OPENROWSET (Transact-SQL), 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 des données de 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 de format natif et de caractères à partir de versions antérieures de SQL Server.

Remarque

Vous pouvez également spécifier le formatage par champ dans un fichier de format. Pour plus d’informations, consultez Format de fichiers 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 myChar 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.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. Pour plus d’informations, consultez fichiers de format non XML (SQL Server). La commande suivante utilise l’utilitaire bcp pour générer un fichier de format non xml, myChar.fmt, basé 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 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 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 suivants utilisent les fichiers de base de données et de format créés précédemment dans cet article.

Utiliser le format bcp et le format caractère pour exporter des données

-c interrupteur et OUT commande.

Le fichier de données créé dans cet exemple sera 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

Utiliser le format bcp et caractère pour importer des données sans 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;"

Utiliser bcp et le format de caractères pour importer des données avec un fichier de format non-XML

Les commutateurs -c et -f et la 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 -f D:\BCP\myChar.fmt -T

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

Utiliser BULK INSERT et le format de caractère sans utiliser de fichier de format

Argument DATAFILETYPE. Exécutez l’instruction Transact-SQL suivant 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;

Utiliser BULK INSERT et un format de caractère avec un fichier de format non XML

Il s’agit d’un exemple de l’argument FORMATFILE. Exécutez l’instruction Transact-SQL suivant 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;

Utiliser OPENROWSET et un format de caractère avec un fichier de format non XML

Exemple de l’argument FORMATFILE. Exécutez l’instruction Transact-SQL suivant 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 en bloc ou l’exportation en bloc :