À propos des opérations d'exportation et d'importation en bloc

SQL Server prend en charge l'exportation en bloc de données à partir d'une table SQL Server et l'importation en bloc de données dans une table ou une vue non partitionnée SQL Server. Les méthodes de base disponibles sont les suivantes.

Méthode

Description

Importe les données

Exporte les données

bcp (utilitaire)

Utilitaire de ligne de commande (Bcp.exe) qui exporte et importe en bloc des données et génère des fichiers de format.

Oui

Oui

Instruction BULK INSERT

Instruction Transact-SQL qui importe des données directement d'un fichier de données dans une table de base de données ou une vue non partitionnée.

Oui

Non

instruction INSERT ... SELECT * FROM OPENROWSET(BULK...)

Instruction Transact-SQL qui utilise le fournisseur d'ensembles de lignes OPENROWSET pour importer en bloc des données dans une table SQL Server en spécifiant la fonction OPENROWSET(BULK…) afin de sélectionner des données dans une instruction INSERT.

Oui

Non

Limitations

Les opérations d'importation en bloc SQL Server ne prennent pas en charge l'importation de données à partir des fichiers de valeurs séparées par des virgules (CSV, Comma-Separated Value). Toutefois, sur les systèmes 32 bits, il est possible d'importer des données CSV dans une table SQL Server sans optimisation de l'importation en bloc en utilisant OPENROWSET avec le fournisseur OLE DB pour Jet. Jet traite les fichiers texte comme des tables, à l'aide du schéma défini par un fichier schema.ini situé dans le même répertoire que la source de données. Pour des données CSV, l'un des paramètres du fichier schema.ini doit être « FORMAT=CSVDelimited ». Pour utiliser cette solution, vous devez comprendre le fonctionnement de Jet Text IISAM (syntaxe de sa chaîne de connexion, utilisation de schema.ini, options de configuration du Registre, etc.). Les meilleures sources d'informations sont l'Aide de Microsoft Access et les articles de la Base de connaissances. Pour plus d'informations, consultez Initialisation du pilote de source de données de texte, How To Use a SQL Server 7.0 Distributed Query with a Linked Server to Secured Access Databases (en anglais), HOW TO: Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases (en anglais) et How To Open Delimited Text Files Using the Jet Provider's Text IIsam (en anglais).

Comparaison entre une opération in-process et une opération hors processus

L'instruction BULK INSERT et la fonction OPENROWSET(BULK) s'exécutent in-process avec SQL Server, en partageant le même espace d'adresse mémoire. Les fichiers de données étant ouverts par un processus SQL Server, les données ne sont pas copiées entre le processus client et les processus SQL Server. Pour des considérations sur la sécurité lorsque vous importez des données à l'aide de l'instruction BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK...), consultez Importation de données en bloc à l'aide de BULK INSERT ou OPENROWSET(BULK...).

À l'inverse, l'utilitaire bcp s'exécute en mode extra-processus. Pour déplacer des données à travers les espaces de mémoire de processus, bcp doit utiliser le marshaling de données inter-processus. Ce processus vise à convertir les paramètres d'un appel de méthode en un flux d'octets. Cette opération peut ajouter une charge importante au processeur. Toutefois, étant donné que bcp analyse les données et les convertit au format de stockage natif au cours du processus client, ils peuvent décharger le processus SQL Server de l'analyse et de la conversion de données. Par conséquent, si vous avez une contrainte au niveau de l'UC, vous obtiendrez peut-être de meilleures performances d'importation en bloc sur un ordinateur équipé de plusieurs UC ou sur des ordinateurs différents, en utilisant bcp plutôt que les commandes BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK).

Fichiers de format

L'utilitaire bcp, et les commandes BULK INSERT et INSERT ... SELECT * FROM OPENROWSET(BULK...) gèrent tous l'utilisation d'un fichier de format spécialisé qui stocke les informations de format de chaque champ dans un fichier de données. Un fichier de format peut également contenir des informations sur la table SQL Server correspondante. Le fichier de format peut être utilisé pour fournir toutes les informations de format nécessaires pour exporter en bloc des données à partir d'une instance de SQL Server et pour importer en bloc des données vers une instance du même type.

Les fichiers de format procurent une souplesse qui permet d'une part l'interprétation des données tel qu'elles existent dans le fichier de données au moment de l'importation, et d'autre part le formatage des données dans le fichier de données au moment de l'exportation. Cette souplesse vous dispense d'écrire un code spécial en vue d'interpréter ou de reformater les données en fonction des exigences spécifiques de SQL Server ou de l'application externe. Ainsi, si les données exportées en bloc doivent être chargées dans une application nécessitant des valeurs séparées par une virgule, vous pouvez utiliser un fichier de format pour insérer des virgules comme terminateurs de champ dans les données exportées.

SQL Server 2005 et les versions ultérieures prennent en charge deux types de fichiers de format : XML et non XML. Les fichiers de format non-XML sont pris en charge par les versions antérieures de SQL Server ; les fichiers de format XML constituaient une nouveauté de SQL Server 2005.

Le seul outil capable de générer un format de fichier est l'utilitaire bcp. Pour plus d'informations, consultez Création d'un fichier de format. Pour plus d'informations sur les fichiers de format, consultez Fichiers de format pour l'importation ou l'exportation de données

[!REMARQUE]

Si, à l'occasion d'une opération d'exportation ou d'importation en bloc, aucun fichier de format n'est fourni, l'utilisateur peut choisir de remplacer le formatage par défaut via la ligne de commande.

Le processeur de requêtes et l'importation en bloc

Pour importer des données en bloc dans une instance de SQL Server, l'utilitaire bcp, les instructions BULK INSERT et INSERT ... SELECT * FROM OPENROWSET(BULK...) fonctionnent de pair avec le processeur de requêtes.

Les trois méthodes convertissent les données du fichier de données en ensembles de lignes OLE DB. Mais la méthode de conversion est variable, comme suit :

  • L'utilitaire bcp lit le fichier de données puis envoie un flux TDS au composant API BCP de SQL Server qui convertit les données en ensembles de lignes OLE DB.

  • L'instruction BULK INSERT et le fournisseur d'ensembles de lignes en bloc OPENROWSET convertissent des données de fichier directement en un ensemble de lignes OLE DB.

Les ensembles de lignes OLE DB sont insérés dans la table cible par le processeur de requêtes qui planifie et optimise chaque opération.

Considérations relatives aux performances

Ces considérations peuvent être importantes si vous importez des volumes de données importants. Dans certains cas, vous pouvez améliorer les performances en modifiant la façon dont une opération d'importation ou d'exportation en bloc traite un ou plusieurs des éléments suivants :

  • Commutateurs de traitement

  • Contrôle des contraintes (contraintes CHECK)

  • Mode de journalisation des transactions en bloc. Cette section s'applique aux bases de données employant habituellement le mode de sauvegarde complète.

  • Ordre des données exportées

  • Importation de données en parallèle

  • Verrouillage des tables

  • Exécution des déclencheurs

Pour plus d'informations, consultez Optimisation de l'importation en bloc.

[!REMARQUE]

Il n'existe aucune technique d'optimisation particulière pour les opérations d'exportation en bloc. Ces opérations consistent seulement à sélectionner les données dans la table source au moyen d'une instruction SELECT.

Historique des modifications

Mise à jour du contenu

Ajout d'une section « Limitations » pour préciser que les fichiers de valeurs séparées par des virgules (CSV, Comma-Separated Value) ne sont pas pris en charge par les opérations d'importation en bloc SQL Server.