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 :
Partage activé pour l’accès aux E/S de fichier FILESTREAM au niveau de l’instance SQL Server.
DIRECTORY_NAME
Spécifié au niveau de la base de données.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’instructionALTER 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’instructionCREATE TABLE
lorsque vous créez un FileTable. Vous pouvez modifier ce nom à l’aide de laALTER 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é :
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 FILESTREAM et FileTable Functions (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 des groupes de disponibilité Always On (SQL Server).
Contenu associé
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour