GetFileNamespacePath (Transact-SQL)
S'applique à : SQL Server
Retourne le chemin d'accès UNC d'un fichier ou d'un répertoire dans un FileTable.
Syntaxe
<column-name>.GetFileNamespacePath(is_full_path, @option)
Arguments
column-name
Nom de colonne de la colonne VARBINARY(MAX) file_stream colonne dans un FileTable.
La valeur de nom de colonne doit être un nom de colonne valide. Il ne peut pas s'agir d'une expression ni d'une valeur convertie à partir d'une colonne présentant un autre type de données.
is_full_path
Expression entière qui spécifie s'il faut retourner un chemin d'accès absolu ou relatif. is_full_path pouvez avoir l’une des valeurs suivantes :
Valeur | Description |
---|---|
0 | Retourne le chemin d'accès relatif dans le répertoire au niveau de la base de données. Il s'agit de la valeur par défaut |
1 | Retourne le chemin d'accès UNC complet, en commençant par \\computer_name . |
@option
Expression entière qui définit comment le composant serveur du chemin d'accès doit être mis en forme. @option pouvez avoir l’une des valeurs suivantes :
Valeur | Description |
---|---|
0 | Retourne le nom de serveur converti au format NetBIOS, par exemple :\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase Il s’agit de la valeur par défaut. |
1 | Retourne le nom de serveur non converti, par exemple :\\ServerName\MSSQLSERVER\MyDocumentDatabase |
2 | Retourne le chemin d'accès complet du serveur, par exemple :\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase |
Type renvoyé
nvarchar(max)
Si l’instance SQL Server est en cluster dans un cluster de basculement, le nom de l’ordinateur retourné dans le cadre de ce chemin est le nom d’hôte virtuel de l’instance en cluster.
Lorsque la base de données appartient à un groupe de disponibilité Always On, la fonction FileTableRootPath retourne le nom de réseau virtuel (VNN) au lieu du nom de l’ordinateur.
Remarques d'ordre général
Le chemin d’accès retourné par la fonction GetFileNamespacePath est un répertoire logique ou un chemin de fichier au format suivant :
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...
Ce chemin logique ne correspond pas directement à un chemin d'accès NTFS physique. Il est traduit en chemin d’accès physique par le pilote de filtre du système de fichiers de FILESTREAM et l’agent FILESTREAM. Cette séparation entre le chemin d’accès logique et le chemin physique permet à SQL Server de réorganiser les données en interne sans affecter la validité du chemin.
Meilleures pratiques
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 et GetFileNamespacePath , comme illustré dans l’exemple suivant. Par défaut, la fonction GetFileNamespacePath retourne le chemin relatif du fichier sous le chemin racine de la base de données.
USE MyDocumentDatabase;
@root varchar(100)
SELECT @root = FileTableRootPath();
@fullPath = varchar(1000);
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore
WHERE Name = N'document.docx';
Notes
Exemples
Les exemples suivants montrent comment appeler la fonction GetFileNamespacePath pour obtenir le chemin UNC d’un fichier ou d’un répertoire dans un FileTable.
-- returns the relative path of the form "\MyFileTable\MyDocDirectory\document.docx"
SELECT file_stream.GetFileNamespacePath() AS FilePath FROM DocumentStore
WHERE Name = N'document.docx';
-- returns "\\MyServer\MSSQLSERVER\MyDocumentDatabase\MyFileTable\MyDocDirectory\document.docx"
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N'document.docx';
Voir aussi
Travailler avec des répertoires et des chemins d’accès dans des FileTables