Préparer des données à une exportation ou une importation en bloc

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Cette section présente les points à prendre en considération lors de la planification d'opérations d'exportation en bloc et les contraintes liées aux opérations d'importation en bloc.

Remarque

Si vous n’êtes pas certain de savoir mettre en forme un fichier de données pour une importation en bloc, utilisez l’utilitaire bcp pour exporter des données de la table dans un fichier de données. La mise en forme de chaque champ de données dans ce fichier indique la mise en forme nécessaire pour importer des données en bloc dans la colonne de table correspondante. Utilisez la même mise en forme des données pour les champs de votre fichier de données.

Considérations sur le format du fichier de données pour l'exportation en bloc

Avant de réaliser une opération d’exportation en bloc à l’aide de la commande bcp , prenez en considération les points suivants :

  • Lorsque des données sont exportées vers un fichier, la commande bcp crée automatiquement le fichier de données en utilisant le nom de fichier spécifié. Si ce nom de fichier est déjà utilisé, les données en cours de copie en bloc dans le fichier de données remplacent le contenu existant de ce fichier.

  • L'exportation en bloc depuis une table ou une vue vers un fichier de données requiert l'existence d'une autorisation SELECT sur la table ou la vue qui fait l'objet d'une copie en bloc.

  • SQL Server peut utiliser des analyses parallèles pour récupérer les données. Par conséquent, il est possible que les lignes de la table exportées en bloc depuis une instance de SQL Server n'apparaissent pas dans un ordre spécifique dans le fichier de données. Pour que les lignes de la table exportées en bloc apparaissent selon un ordre spécifique dans le fichier de données, utilisez l’option queryout pour effectuer une exportation en bloc depuis une requête et spécifiez une clause ORDER BY.

Contraintes liées au format du fichier de données pour l'importation en bloc

Pour que les données puissent être importées depuis un fichier de données, celui-ci doit satisfaire aux conditions de base suivantes :

  • Les données doivent être organisées en lignes et en colonnes.

Remarque

La structure du fichier de données n'a pas besoin d'être identique à la structure de la table SQL Server, car les colonnes peuvent être ignorées ou réorganisées lors de l'importation en bloc.

  • Le format des données du fichier de données doit être un format pris en charge, par exemple le format caractère ou le format natif.

  • Le format des données peut être le format binaire natif ou caractère, notamment le format Unicode.

  • Pour que vous puissiez importer des données à l’aide d’une commande bcp, d’une instruction BULK INSERT, ou d’une instruction INSERT ... SELECT * FROM OPENROWSET(BULK...), la table de destination doit déjà exister.

  • Chaque champ du fichier de données doit être compatible avec la colonne correspondante de la table cible. Par exemple, un champ int ne peut pas être chargé dans une colonne datetime. Pour plus d’informations, consultez Formats de données pour l’importation en bloc ou l’exportation en bloc (SQL Server) et spécifier des formats de données pour la compatibilité lors de l’utilisation de bcp (SQL Server).

    Remarque

    Pour spécifier un sous-ensemble de lignes d’un fichier de données à importer au lieu du fichier tout entier, vous pouvez utiliser une commande bcp avec le commutateur -F <first_row> et/ou le commutateur -L <last_row>. Pour plus d’informations, consultez bcp Utility.

  • Pour importer des données à partir de fichiers de données contenant des champs de longueur fixe ou de largeur fixe, utilisez un fichier de format. Pour plus d’informations, consultez Fichiers de format XML (SQL Server).

  • À compter de SQL Server 2017 (14.x), un fichier CSV peut être utilisé comme fichier de données pour une importation en bloc de données dans SQL Server. La marque de fin de champ d'un fichier CSV n'est pas nécessairement une virgule. Pour être utilisable comme fichier de données pour une importation en bloc, un fichier CSV doit être conforme aux restrictions suivantes :

    • Les champs de données ne contiennent jamais la marque de fin de champ.

    • Soit toutes les valeurs d'un champ de données sont placées entre guillemets (""), soit aucune de ces valeurs n'est placée entre guillemets.

      Pour effectuer une importation en bloc des données d'un fichier de table Microsoft FoxPro ou Visual FoxPro (.dbf) ou d'un fichier de feuille de calcul Microsoft Excel (.xls), vous devez convertir les données en un fichier CSV conforme aux limitations décrites précédemment. L'extension de fichier est en général .csv. Vous pouvez alors utiliser ce fichier .csv comme fichier de données dans une opération d'importation en bloc SQL Server.

      Sur les systèmes 32 bits (SQL Server 2014 (12.x) et versions antérieures), vous pouvez 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 les données CSV, l’un des paramètres du fichier schema.ini serait "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(en anglais), Comment utiliser une requête distribuée SQL Server 7.0 avec un serveur lié à des bases de données Access sécurisées(en anglais), Comment : utiliser Jet OLE DB Provider 4.0 pour se connecter à des bases de données ISAM(en anglais) et Comment ouvrir des fichiers texte délimité en utilisant Text IIsam du fournisseur Jet(en anglais).

En outre, l'importation en bloc de données depuis un fichier de données vers une table requiert le respect des points suivants :

  • Les utilisateurs doivent disposer des autorisations INSERT et SELECT sur la table. Les utilisateurs ont également besoin de l'autorisation ALTER TABLE lorsqu'ils utilisent des options qui impliquent des opérations DDL (Data Definition Language), par exemple la désactivation de contraintes.

  • Lorsque vous importez en bloc des données à l'aide de l'instruction BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK...), le fichier de données doit être accessible pour les opérations de lecture par le profil de sécurité du processus SQL Server (si l'utilisateur se connecte à l'aide de la connexion fournie par SQL Server) ou par la connexion Microsoft Windows utilisée dans le cadre d'une délégation de sécurité. En outre, l'utilisateur doit disposer de l'autorisation ADMINISTER BULK OPERATIONS pour lire le fichier.

Remarque

L'importation en bloc dans une vue partitionnée n'est pas prise en charge et toute tentative en ce sens est vouée à l'échec.