Utilisation du format natif pour importer ou exporter des données

Il est recommandé d'utiliser le format natif lorsque vous transférez des données en bloc entre plusieurs instances de MicrosoftSQL Server au moyen d'un fichier de données qui ne contient pas de caractères appartenant à un jeu de caractères étendus/codés sur deux octets (DBCS).

[!REMARQUE]

Pour transférer des données en bloc entre plusieurs instances de SQL Server au moyen d'un fichier de données qui contient des caractères appartenant à un jeu de caractères étendus/codés sur deux octets, utilisez de préférence le format natif Unicode. Pour plus d'informations, consultez Utilisation du format natif Unicode pour importer ou exporter des données.

Le format natif préserve les types de données native d'une base de données. Il est destiné aux transferts de données à haute vitesse entre des tables SQL Server. Si vous utilisez un fichier de format, les tables source et cible ne doivent pas nécessairement être identiques. Le transfert de données se déroule en deux étapes :

  1. exportation en bloc des données d'une table source vers un fichier de données ;

  2. importation en bloc des données d'un fichier de données vers la table cible.

L'utilisation d'un format natif entre tables identiques permet de gagner du temps et de l'espace puisque les conversions superflues des types de données à partir de et vers le format caractère sont éliminées. Pour atteindre la vitesse de transfert optimale, quelques contrôles sont effectués au niveau du formatage des données. Pour empêcher que des problèmes ne surviennent au niveau des données chargées, tenez compte des restrictions suivantes.

Restrictions

Pour importer des données au format natif, veillez à ce que les conditions suivantes soient réunies :

  • Le fichier de données doit être au format natif.

  • Soit la table cible doit être compatible avec le fichier de données (qui doit présenter le nombre voulu de colonnes, avec les mêmes types de données, longueur de colonne, état NULL, etc.), soit vous devez utiliser un fichier de format pour mapper chacun des champs sur sa colonne correspondante.

    [!REMARQUE]

    Si vous importez des données d'un fichier qui ne concorde pas avec la table cible, l'importation peut réussir mais les valeurs de données insérées dans la table cible peuvent être incorrectes. En effet, les données du fichier sont interprétées en se basant sur le format de la table cible. Par conséquent, tout défaut de correspondance entraîne l'insertion de valeurs incorrectes. Cependant, en aucun cas une telle non-correspondance peut-elle provoquer des incohérences logiques ou physiques dans la base de données.

    Pour plus d'informations sur l'utilisation de fichiers de format, consultez Fichiers de format pour l'importation ou l'exportation de données.

Une importation réussie n'endommage pas la table cible.

Traitement des données au format natif par l'utilitaire bcp

Cette section comporte des remarques spécifiques liées à la manière dont l'utilitaire bcp exporte et importe les données au format natif.

  • Données non-caractère

    Cet utilitaire emploie le format de données binaires interne de SQL Server pour écrire des données non-caractère d'une table vers un fichier de données.

  • Données char ou varchar

    Au début de chaque champ char ou varchar, bcp ajoute la longueur du préfixe.

    Important

    En mode natif, l'utilitaire bcp convertit par défaut les caractères de SQL Server en caractères OEM avant de les copier dans un fichier de données. Il convertit les caractères du fichier de données en caractères ANSI avant de les importer en bloc dans une table SQL Server. Au cours de ces conversions, il est possible que des données caractères étendus soient perdues. Dans le cas de caractères étendus, vous devez soit utiliser le format natif Unicode, soit spécifier une page de codes. Pour plus d'informations sur l'utilisation d'une page de codes, consultez Copie de données entre différents classements.

  • Données sql_variant

    Si des données sql_variant sont stockées en tant que SQLVARIANT dans un fichier de données au format natif, elles conservent l'ensemble de leurs caractéristiques. Les métadonnées qui enregistrent le type de données de chaque valeur de données sont stockées en même temps que celle-ci. Elles sont employées pour recréer la valeur de données avec le même type de données dans une colonne sql_variant de destination.

    Si le type de données de la colonne de destination n'est pas sql_variant, chaque valeur de données est convertie au type de données de la colonne de destination, suivant les règles normales de la conversion implicite de données. Si une erreur survient pendant la conversion des données, le traitement actif est annulé. Toute valeur char ou varchar transférée entre des colonnes sql_variant peut faire l'objet de problèmes de conversion par page de codes. Pour plus d'informations, consultez Copie de données entre différents classements.

    Pour plus d'informations sur les conversions de données, consultez Conversion de types de données (moteur de base de données).

Options de commande pour le format natif

Vous pouvez importer des données au format natif dans une table à l'aide de l'utilitaire bcp ou des instructions 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 la ligne de commande. Pour une instruction INSERT ... SELECT * FROM OPENROWSET(BULK...), vous devez spécifier le format de données dans un fichier de format.

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

Commande

Option

Description

bcp

-n

Fait en sorte que l'utilitaire bcp utilise les types de données native des données.1

BULK INSERT

DATAFILETYPE =« native »

Utilise les types de données native ou widenative des données. Notez que DATAFILETYPE n'est pas nécessaire si un fichier de format spécifie les types de données.

1 Pour charger des données au format natif (-n) dans un format compatible avec des versions antérieures de clients SQL Server, utilisez le commutateur -V. Pour plus d'informations, consultez Importation de données au format natif et caractère à partir de versions antérieures de SQL Server.

Pour plus d'informations, consultez Utilitaire bcp, BULK INSERT (Transact-SQL) ou OPENROWSET (Transact-SQL).

[!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.

Exemples

Les exemples suivants montrent comment exporter en bloc des données au format natif à l'aide de bcp et d'importer en bloc ces mêmes données à l'aide de BULK INSERT.

Exemple de table

Une table nommée myTestNativeData doit être créée dans l'exemple de base de données AdventureWorks sous le schéma dbo. Avant de commencer, vous devez créer cette table. Dans l'Éditeur de requête SQL Server Management Studio, exécutez :

USE AdventureWorks;
GO
CREATE TABLE myTestNativeData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

Pour remplir cette table et afficher le contenu de résultat, exécutez les instructions suivantes :

INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData

Utilisation de l'utilitaire bcp pour exporter en bloc des données au format natif

Pour exporter des données de la table vers le fichier de données, utilisez bcp avec l'option out et les identificateurs suivants :

Qualificateurs

Description

-n

Spécifie des types de données native.

-T

Spécifie que l'utilitaire bcp se connecte à SQL Server avec une connexion approuvée qui utilise la sécurité intégrée. Si vous omettez -T, vous devez indiquer -U et -P pour que la connexion réussisse.

Dans l'exemple suivant, des données sont exportées en bloc au format natif de la table myTestNativeData vers un nouveau fichier de données appelé myTestNativeData-n.Dat. À l'invite de commandes Microsoft Windows, tapez :

bcp AdventureWorks..myTestNativeData out C:\myTestNativeData-n.Dat -n -T

Utilisation de BULK INSERT pour importer en bloc des données au format natif

Dans l'exemple ci-dessous, l'instruction BULK INSERT est employée pour importer les données du fichier de données myTestNativeData-n.Dat dans la table myTestNativeData. Dans l'Éditeur de requête SQL Server Management Studio, exécutez :

USE AdventureWorks;
GO
BULK INSERT myTestNativeData 
    FROM 'C:\myTestNativeData-n.Dat' 
   WITH (DATAFILETYPE='native'); 
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData
GO