Partager via


Travailler avec des répertoires et des chemins d’accès dans des FileTables

S’applique à : SQL Server

Décrit la structure de répertoires dans laquelle les fichiers sont stockés dans FileTables.

Procédure : travailler avec des répertoires et des chemins d'accès dans FileTables

Vous pouvez utiliser les trois fonctions suivantes pour travailler avec des répertoires FileTable dans Transact-SQL :

Pour obtenir ce résultat Utilisez cette fonction
Obtenir le chemin d'accès UNC au niveau racine pour un FileTable spécifique ou pour la base de données actuelle. FileTableRootPath (Transact-SQL)
Obtenir un chemin d'accès UNC absolu ou relatif pour un fichier ou répertoire d'un FileTable. GetFileNamespacePath (Transact-SQL)
Obtenir la valeur d'ID de localisateur de chemin d'accès pour le fichier ou le répertoire spécifié d'un FileTable, en spécifiant le chemin d'accès. GetPathLocator (Transact-SQL)

Utiliser des chemins d’accès relatifs pour du code portable

Pour garder le code et les applications indépendantes de l'ordinateur actuel et de la base de données, évitez d'écrire du code qui contient des chemins d'accès de fichier absolus. Au lieu de cela, récupérez le chemin d’accès complet d’un fichier au moment de l’exécution en utilisant les fonctions FileTableRootPath (Transact-SQL) et GetFileNamespacePath (Transact-SQL) ensemble, comme illustré dans l’exemple suivant. Par défaut, la fonction GetFileNamespacePath retourne le chemin d'accès relatif du fichier sous le chemin d'accès racine de la base de données.

USE database_name;

DECLARE @root NVARCHAR(100);
DECLARE @fullpath NVARCHAR(1000);

SELECT @root = FileTableRootPath();

SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';

PRINT @fullpath;
GO

Limites

Niveau d’imbrication

Important

Vous ne pouvez pas stocker plus de 15 niveaux de sous-répertoires dans le répertoire FileTable. Lorsque vous stockez 15 niveaux de sous-répertoires, le niveau le plus bas ne peut pas contenir de fichiers, étant donné que ces fichiers représenteraient un niveau supplémentaire.

Longueur du nom du chemin d'accès complet

Important

Le système de fichiers NTFS prend en charge les noms de chemin d'accès qui sont beaucoup plus longs que la limite de 260 caractères imposée par le shell Windows et de la plupart des API Windows. Par conséquent, il est possible de créer des fichiers dans la hiérarchie des fichiers d'un FileTable à l'aide de Transact-SQL que vous ne pouvez pas afficher ou ouvrir avec l'Explorateur Windows ou de nombreuses autres applications Windows, car le chemin d'accès complet dépasse 260 caractères. Toutefois vous pouvez continuer à accéder à ces fichiers à l'aide de Transact-SQL.

Chemin complet à un élément stocké dans un FileTable

Le chemin d'accès complet à un fichier ou un répertoire stocké dans un FileTable commence par les éléments suivants :

  1. Le partager activé pour l’accès d’E/S de fichier FILESTREAM au niveau de l’instance de SQL Server.

  2. Le DIRECTORY_NAME spécifié au niveau de la base de données.

  3. Le FILETABLE_DIRECTORY spécifié au niveau de FileTable.

La hiérarchie résultante ressemble à celle-ci :

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Cette hiérarchie de répertoires forme la racine de l’espace de noms de fichiers du FileTable. Sous cette hiérarchie de répertoires, les données FILESTREAM pour le FileTable sont stockées en tant que fichiers, et comme sous-répertoires qui peuvent également contenir des fichiers et des sous-répertoires.

Il est important de se souvenir que la hiérarchie de répertoires créée sous le partage FILESTREAM au niveau de l'instance est une hiérarchie de répertoires virtuels. Cette hiérarchie est stockée dans la base de données SQL Server et n’est pas représentée physiquement dans le système de fichiers NTFS. Toutes les opérations qui accèdent à des fichiers et des répertoires sous le partage FILESTREAM et dans le FileTables qu’il contient sont interceptées et gérées par un composant de SQL Server incorporé dans le système de fichiers.

Sémantique des répertoires racines aux niveaux de l'instance, de la base de données et de FileTable

Cette hiérarchie de répertoires observe la sémantique suivante :

  • Le partage FILESTREAM au niveau de l'instance est configuré par un administrateur et stocké comme propriété du serveur. Vous pouvez renommer ce partage à l’aide du gestionnaire de configuration SQL Server. Une opération de changement de nom n’entre en vigueur qu’une fois que le serveur a redémarré.

  • Le DIRECTORY_NAME au niveau de la base de données est null par défaut quand vous créez une base de données. Un administrateur peut définir ou modifier ce nom à l’aide de l’instruction ALTER DATABASE. Le nom doit être unique (dans une comparaison ne respectant pas la casse) dans cette instance.

  • On fournit en général le nom FILETABLE_DIRECTORY dans le cadre de l’instruction CREATE TABLE quand on crée un FileTable. Vous pouvez modifier ce nom à l’aide de la commande ALTER TABLE.

  • Vous ne pouvez pas renommer ces répertoires racines par le biais d’opérations d’E/S de fichier.

  • Vous ne pouvez pas ouvrir ces répertoires racines avec des descripteurs de fichiers exclusifs.

Colonne is_directory dans le schéma de FileTable

Le tableau suivant décrit l’interaction entre la colonne is_directory et la colonne file_stream qui contient les données FILESTREAM dans un FileTable.

is_directory value file_stream value Comportement
FALSE NULL Il s’agit d’une combinaison non valide qui est interceptée par une contrainte définie par le système.
FALSE <value> L'élément représente un fichier.
TRUE NULL L'élément représente un répertoire.
TRUE <value> Il s’agit d’une combinaison non valide qui est interceptée par une contrainte définie par le système.

Utiliser des noms de réseau virtuel (VNN) avec des groupes de disponibilité Always On

Lorsque la base de données qui contient des données FILESTREAM ou FileTable appartient à un groupe de disponibilité :