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 :
Le partager activé pour l’accès d’E/S de fichier FILESTREAM au niveau de l’instance de SQL Server.
Le
DIRECTORY_NAME
spécifié au niveau de la base de données.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’instructionALTER 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’instructionCREATE TABLE
quand on crée un FileTable. Vous pouvez modifier ce nom à l’aide de la commandeALTER 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é :
Les fonctions FILESTREAM et FileTable acceptent ou retournent des noms de réseau virtuel (VNN) à la place de noms d'ordinateur. Pour plus d’informations sur ces fonctions, consultez Fonctions FILESTREAM et FileTable (Transact-SQL).
Tous les accès à FILESTREAM ou aux données FileTable via les API du système de fichiers doivent utiliser des VNN à la place des noms d'ordinateur. Pour plus d’informations, consultez FILESTREAM et FileTable avec groupes de disponibilité Always On (SQL Server).