Utiliser des répertoires et des chemins d’accès dans 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 utiliser 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 relatifs pour le 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, obtenez le chemin d’accès complet d’un fichier au moment de l’exécution à l’aide des fonctions FileTableRootPath (Transact-SQL) et GetFileNamespacePath (Transact-SQL),, 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. Partage activé pour l’accès aux E/S de fichier FILESTREAM au niveau de l’instance SQL Server.

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

  3. 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 fileTable sont stockées en tant que fichiers et 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 aux fichiers et répertoires sous le partage FILESTREAM et dans les FileTables qu’il contient sont interceptées et gérées par un composant 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 de Gestionnaire de configuration SQL Server. Une opération de changement de nom n’a pas pris effet tant que le serveur n’est pas redémarré.

  • Le niveau DIRECTORY_NAME de la base de données est null par défaut lorsque 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.

  • Vous fournissez généralement le FILETABLE_DIRECTORY nom dans le cadre de l’instruction CREATE TABLE lorsque vous créez un FileTable. Vous pouvez modifier ce nom à l’aide de la ALTER TABLE commande.

  • 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 handles de fichiers exclusifs.

Colonne is_directory dans le schéma de FileTable

Le tableau suivant décrit l’interaction entre la is_directory colonne et la file_stream colonne 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 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 interceptée par une contrainte définie par le système.

Utiliser des noms 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é :