Partager via


Utiliser le format natif 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 natif Unicode est utile lorsque des informations doivent être copiées d'un programme d’installation Microsoft SQL Server à un autre. L'utilisation du format natif pour les données qui ne sont pas de type caractère (char) permet de gagner du temps, puisque vous supprimez les conversions inutiles des types de données depuis et vers le format caractère. L'utilisation du format caractère Unicode pour toutes les données de type caractère évite la perte des caractères étendus lorsque vous transférez en bloc des données entre des serveurs utilisant des pages de codes différentes. Un fichier de données au format natif Unicode peut être lu par toutes les méthodes d'importation en bloc.

Le format natif Unicode est recommandé pour le transfert en bloc des données entre plusieurs instances de SQL Server par le biais d'un fichier de données qui contient des caractères étendus ou des caractères codés sur deux octets (DBCS). Pour les données qui ne sont pas de type caractère, le format natif Unicode utilise des types de données (bases de données) natifs. Pour les données de type caractère, comme char, nchar, varchar, nvarchar, texte, varchar (max), nvarchar (max)et ntext, le format natif Unicode utilise le format de données de type caractère Unicode.

Les données sql_variant stockées en tant que SQLVARIANT dans un fichier de données au format natif Unicode fonctionnent de la même manière que dans un fichier de données au format natif, sauf que les valeurs char et varchar sont converties en nchar et nvarchar, ce qui double la quantité de stockage requise pour les colonnes affectées. Les métadonnées d’origine sont conservées et les valeurs sont reconverties dans leur type de données d’origine ( char et varchar ) au moment où elles sont importées en bloc dans une colonne de table.

Options de commande pour le format natif Unicode

Vous pouvez importer des données de format natif Unicode dans une table à l’aide de bcp, BULK INSERT ou OPENROWSET BULK.

  • 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 BULK , vous devez spécifier le format de données dans un fichier de format.

Le format natif Unicode est pris en charge par les options de commande suivantes :

Commande Choix Descriptif
bcp -N Provoque l’utilisation bcp du format natif Unicode, qui utilise des types de données natifs (base de données) pour toutes les données non génériques et le format de données caractères Unicode pour toutes les données caractère (char, nchar, varchar, nvarchar, texte et ntext).
BULK INSERT DATAFILETYPE ='widenative' Utilise le format natif Unicode lors de l’importation en bloc des données.
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 Format de fichiers pour importer ou exporter des données (SQL Server).

Exemples de conditions de test

Les exemples de cette rubrique sont basés sur l’exemple de tableau myWidenative et le fichier myWidenative.fmtde format . Remplacez les chemins d’accès de fichiers locaux par un chemin d’accès de fichier local sur votre système.

Exemple de table

Le script suivant crée une base de données de test, une table nommée myWidenative et remplit la table avec certaines valeurs initiales. Exécutez les opérations Transact-SQL suivantes :

CREATE DATABASE TestDatabase;
GO

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

-- Populate table
INSERT TestDatabase.dbo.myWidenative
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.myWidenative;

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, myWidenative.fmtbasé sur le schéma de myWidenative.

  • 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.
  • c est utilisé pour spécifier des données de caractère
  • 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.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

REM Review file
Notepad D:\BCP\myWidenative.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.

Utiliser bcp et le format natif Unicode pour exporter des données

Commutateur -N et commande OUT.

Le fichier de données créé dans cet exemple sera utilisé dans tous les exemples suivants.

À partir d’une invite de commandes, entrez les commandes suivantes :

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

Utiliser bcp et le format natif Unicode pour importer des données sans fichier de format

Commutateur -N et commande IN.

À partir d’une invite de commandes, entrez les commandes suivantes :

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

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

Utiliser bcp et le format natif Unicode pour importer des données avec un fichier de format non XML

Les commutateurs -N et -f et la commande IN.

À partir d’une invite de commandes, entrez les commandes suivantes :

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

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

REM Review results is SSMS

Utiliser BULK INSERT et le format natif Unicode sans fichier de format

Argument DATAFILETYPE.

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

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

BULK INSERT TestDatabase.dbo.myWidenative
    FROM 'D:\BCP\myWidenative.bcp'
    WITH (DATAFILETYPE = 'widenative' );

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

Utiliser BULK INSERT et le format natif Unicode avec un fichier de format non XML

Argument FORMATFILE.

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

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

BULK INSERT TestDatabase.dbo.myWidenative
   FROM 'D:\BCP\myWidenative.bcp'
   WITH ( FORMATFILE = 'D:\BCP\myWidenative.fmt'  );

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

Utiliser OPENROWSET et le format natif Unicode avec un fichier de format non XML

Argument FORMATFILE.

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

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

INSERT INTO TestDatabase.dbo.myWidenative
SELECT * FROM OPENROWSET (
    BULK 'D:\BCP\myWidenative.bcp',
    FORMATFILE = 'D:\BCP\myWidenative.fmt'
) AS t1;

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

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