Partager via


Charger des fichiers dans FileTables

Décrit comment charger ou migrer des fichiers dans FileTables.

Chargement ou migration de fichiers dans un FileTable

La méthode que vous choisissez pour charger ou migrer des fichiers dans un FileTable dépend de l’emplacement où les fichiers sont actuellement stockés.

Emplacement actuel des fichiers Options de migration
Les fichiers sont actuellement stockés dans le système de fichiers.

SQL Server n’a aucune connaissance des fichiers.
Étant donné qu’un FileTable apparaît en tant que dossier dans le système de fichiers Windows, vous pouvez facilement charger des fichiers dans un nouveau FileTable à l’aide de l’une des méthodes disponibles pour déplacer ou copier des fichiers. Ces méthodes incluent l’Explorateur Windows, les options de ligne de commande, notamment xcopy et robocopy, ainsi que les scripts ou applications personnalisés.

Vous ne pouvez pas convertir un dossier existant en FileTable.
Les fichiers sont actuellement stockés dans le système de fichiers.

SQL Server contient une table de métadonnées qui contient des pointeurs vers les fichiers.
La première étape consiste à déplacer ou copier les fichiers à l’aide de l’une des méthodes mentionnées ci-dessus.

La deuxième étape consiste à mettre à jour la table des métadonnées existante pour qu’elle pointe vers le nouvel emplacement des fichiers.

Pour plus d’informations, consultez Exemple : Migration de fichiers à partir du système de fichiers vers un FileTable dans cette rubrique.

Guide pratique pour charger des fichiers dans un FileTable

Les méthodes que vous pouvez utiliser pour charger des fichiers dans un FileTable sont les suivantes :

  • Faites glisser et déposez des fichiers des dossiers sources vers le nouveau dossier FileTable dans l’Explorateur Windows.

  • Utilisez des options de ligne de commande telles que MOVE, COPY, XCOPY ou ROBOCOPY à partir de l’invite de commandes ou dans un fichier de commandes par lot ou un script.

  • Écrivez une application personnalisée en C# ou Visual Basic.NET qui utilise des méthodes de l’espace de noms System.IO pour déplacer ou copier les fichiers.

Exemple : migration de fichiers à partir du système de fichiers vers un FileTable

Dans ce scénario, vos fichiers sont stockés dans le système de fichiers et vous disposez d’une table de métadonnées dans SQL Server qui contient des pointeurs vers les fichiers. Vous souhaitez déplacer les fichiers dans un FileTable, puis remplacer le chemin UNC d’origine pour chaque fichier dans les métadonnées par le chemin UNC FileTable. La fonction GetPathLocator (Transact-SQL) vous aide à atteindre cet objectif.

Pour cet exemple, supposons qu’il existe une table de base de données existante, PhotoMetadataqui contient des données sur les photographies. Cette table a une colonne UNCPath de type varchar(512) qui contient le chemin d’accès UNC réel à un fichier .jpg.

Pour migrer les fichiers image du système de fichiers vers un FileTable, vous devez effectuer les opérations suivantes :

  1. Créez un FileTable pour contenir les fichiers. Cet exemple utilise le nom de la table, dbo.PhotoTablemais n’affiche pas le code pour créer la table.

  2. Utilisez xcopy ou un outil similaire pour copier les fichiers .jpg, avec leur structure de répertoires, dans le répertoire racine du FileTable.

  3. Corrigez les métadonnées dans la table PhotoMetadata, en utilisant un code similaire à ce qui suit :

--  Add a path locator column to the PhotoMetadata table.  
ALTER TABLE PhotoMetadata ADD pathlocator hierarchyid;  
  
-- Get the root path of the Photo directory on the File Server.  
DECLARE @UNCPathRoot varchar(100) = '\\RemoteShare\Photographs';  
  
-- Get the root path of the FileTable.  
DECLARE @FileTableRoot varchar(1000);  
SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');  
  
-- Update the PhotoMetadata table.  
  
-- Replace the File Server UNC path with the FileTable path.  
UPDATE PhotoMetadata  
    SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);  
  
-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.  
UPDATE PhotoMetadata  
    SET pathlocator = GetPathLocator(UNCPath);  

Chargement en bloc de fichiers dans un FileTable

Un FileTable se comporte comme une table normale pour les opérations en bloc, avec les qualifications suivantes.

Un FileTable a des contraintes définies par le système qui garantissent l’intégrité de l’espace de noms de fichiers et de répertoires. Ces contraintes doivent être vérifiées sur les données chargées en bloc dans fileTable. Étant donné que certaines opérations d’insertion en bloc permettent d’ignorer les contraintes de table, les exigences suivantes sont appliquées.

  • Les opérations de chargement en bloc qui appliquent des contraintes peuvent être exécutées sur un FileTable comme pour toute autre table. Cette catégorie inclut les opérations suivantes :

    • bcp avec la clause CHECK_CONSTRAINTS.

    • BULK INSERT avec la clause CHECK_CONSTRAINTS.

    • INSÉRER DANS ... SELECT * FROM OPENROWSET(BULK ...) sans clause IGNORE_CONSTRAINTS.

  • Les opérations de chargement en bloc qui n’appliquent pas les contraintes échouent, sauf si les contraintes définies par le système FileTable ont été désactivées. Cette catégorie inclut les opérations suivantes :

    • Utilisation de bcp sans la clause CHECK_CONSTRAINTS.

    • BULK INSERT sans clause CHECK_CONSTRAINTS.

    • INSÉRER DANS ... SELECT * FROM OPENROWSET(BULK ...) avec IGNORE_CONSTRAINTS clause.

Guide pratique pour charger des fichiers en bloc dans un FileTable

Vous pouvez utiliser différentes méthodes pour charger en bloc des fichiers dans un FileTable :

  • Bcp

    • Appelez avec la clause CHECK_CONSTRAINTS .

    • Désactivez l’espace de noms FileTable et appelez sans la clause CHECK_CONSTRAINTS . Réactivez ensuite l’espace de noms FileTable.

  • BULK INSERT

    • Appelez avec la clause CHECK_CONSTRAINTS .

    • Désactivez l’espace de noms FileTable et appelez sans la clause CHECK_CONSTRAINTS . Réactivez ensuite l’espace de noms FileTable.

  • INSÉRER DANS ... SELECT * FROM OPENROWSET(BULK ...)

    • Appelez avec la clause IGNORE_CONSTRAINTS .

    • Désactivez l’espace de noms FileTable et appelez sans la clause IGNORE_CONSTRAINTS . Réactivez ensuite l’espace de noms FileTable.

Pour plus d’informations sur la désactivation des contraintes FileTable, consultez Gérer les FileTables.

Guide pratique pour désactiver les contraintes FileTable pour le chargement en bloc

Pour charger en bloc des fichiers dans un FileTable sans avoir à appliquer les contraintes définies par le système, vous pouvez désactiver temporairement les contraintes. Pour plus d’informations, consultez Gérer les FileTables.

Voir aussi

Accéder aux FileTables avec Transact-SQL
Utiliser les FileTables avec les API de fichiers Input-Output