Partager via


Charger des fichiers dans FileTables

Explique comment charger ou migrer des fichiers dans FileTables.

Dans cette rubrique

Je souhaite…

  • Charger ou migrer des fichiers dans un FileTable

    • Procédure : charger des fichiers dans un FileTable

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

  • Charger des fichiers en masse dans un FileTable

    • Procédure : charger des fichiers en masse dans un FileTable

    • Procédure : désactiver les contraintes de FileTable pour le chargement en masse

Chargement ou migration de fichiers dans un FileTable

La méthode que vous choisissez pour le chargement ou la migration de fichiers dans un FileTable dépend de l'emplacement de stockage actuel des fichiers.

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 s'affiche en tant que dossier dans le système de fichiers Windows, vous pouvez charger facilement des fichiers dans un nouveau FileTable en faisant appel à l'une des méthodes disponibles pour le déplacement ou la copie de fichiers. Ces méthodes incluent l'Explorateur Windows, les options de ligne de commande, notamment xcopy et robocopy, ainsi que les applications ou les scripts personnalisés.

Il est impossible de 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 sur les fichiers.

La première étape consiste à déplacer ou à copier les fichiers à l'aide de l'une des méthodes indiquées ci-dessus.

La deuxième étape consiste à mettre à jour la table de métadonnées existante de sorte qu'elle pointe sur le nouvel emplacement des fichiers.

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

[Haut de la page]

Procédure : charger des fichiers dans un FileTable

Voici quelques-unes des méthodes que vous pouvez appliquer pour charger des fichiers dans un FileTable :

  • Faites glisser et déplacez des fichiers depuis les dossiers source vers le nouveau dossier FileTable dans l'Explorateur Windows.

  • Utilisez les options de ligne de commande telles que MOVE, COPY, XCOPY ou ROBOCOPY de l'invite de commandes ou dans un fichier de commandes 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.

[Haut de la page]

Exemple : migration de fichiers à partir du système de fichiers dans 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 sur 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 de FileTable. La fonction GetPathLocator (Transact-SQL) vous aide à accomplir cet objectif.

Pour cet exemple, supposez qu'il existe une table de base de données nommée PhotoMetadata qui contient des données relatives à des photographies. Cette table possède une colonne UNCPath du type varchar (512) qui contient le chemin 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 nouveau FileTable pour contenir les fichiers. Cet exemple utilise le nom de la table, dbo.PhotoTable, mais ne fournit pas le code permettant de créer la table.

  2. Utilisez xcopy ou un outil similaire pour copier les fichiers .jpg, avec leur structure de répertoire, 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);

[Haut de la page]

Chargement en masse de fichiers dans un FileTable

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

Un FileTable a des contraintes définies par le système qui garantissent le maintien de l'intégrité de l'espace de noms de fichier/répertoire. Ces contraintes doivent être vérifiées sur le volume de données chargé dans le FileTable. Puisque certaines opérations d'insertion en masse permettent d'ignorer les contraintes de table, les conditions requises suivantes sont appliquées.

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

    • bcp avec clause CHECK_CONSTRAINTS.

    • BULK INSERT avec clause CHECK_CONSTRAINTS.

    • INSERT INTO … SELECT * FROM OPENROWSET(BULK …) sans clause IGNORE_CONSTRAINTS.

  • Les opérations de chargement en masse qui n'imposent pas de contraintes échouent à moins que les contraintes de FileTable définies par le système aient été désactivées. Cette catégorie comprend les opérations suivantes :

    • bcp sans clause CHECK_CONSTRAINTS.

    • BULK INSERT sans clause CHECK_CONSTRAINTS.

    • INSERT INTO … SELECT * FROM OPENROWSET(BULK …) avec clause IGNORE_CONSTRAINTS.

[Haut de la page]

Procédure : charger des fichiers en masse dans un FileTable

Vous pouvez faire appel à différentes méthodes pour charger en masse des fichiers dans un FileTable :

  • bcp

    • Effectuez un appel avec la clause CHECK_CONSTRAINTS.

    • Désactivez l'espace de noms FileTable et effectuez un appel sans la clause CHECK_CONSTRAINTS. Puis réactivez l'espace de noms FileTable.

  • BULK INSERT

    • Effectuez un appel avec la clause CHECK_CONSTRAINTS.

    • Désactivez l'espace de noms FileTable et effectuez un appel sans la clause CHECK_CONSTRAINTS. Puis réactivez l'espace de noms FileTable.

  • INSERT INTO … SELECT * FROM OPENROWSET(BULK …)

    • Effectuez un appel avec la clause IGNORE_CONSTRAINTS.

    • Désactivez l'espace de noms FileTable et effectuez un appel sans la clause IGNORE_CONSTRAINTS. Ensuite, réactivez l'espace de noms FileTable.

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

[Haut de la page]

Procédure : désactiver les contraintes de FileTable pour le chargement en masse

Pour charger en masse des fichiers dans un FileTable sans la surcharge liée à l'application des contraintes définies par le système, vous pouvez désactiver temporairement les contraintes. Pour plus d'informations, consultez Gérer des FileTables.

[Haut de la page]

Voir aussi

Concepts

Accéder aux FileTables avec Transact-SQL

Accéder aux FileTables avec les API d'E/S de fichier