GetFileNamespacePath (Transact-SQL)
Devuelve la ruta de acceso UNC para un archivo o directorio de un objeto FileTable.
Sintaxis
<column-name>.GetFileNamespacePath(is_full_path, @option)
Argumentos
column-name
Nombre de la columna file_stream de tipo VARBINARY(MAX) en un objeto FileTable.El valor de column-name debe ser un nombre de columna válido. No puede ser una expresión ni un valor convertido de una columna de otro tipo de datos.
is_full_path
Expresión entera que especifica si se devuelve una ruta de acceso absoluta o relativa. is_full_path puede tener uno de los valores siguientes:Valor
Descripción
0
Devuelve la ruta de acceso relativa al directorio de base de datos.
Es el valor predeterminado.
1
Devuelve la ruta de acceso UNC completa, empezando por \\computer_name.
@option
Expresión entera que define cómo se debe dar formato al componente de servidor de la ruta de acceso. @option puede tener uno de los valores siguientes:Valor
Descripción
0
Devuelve el nombre del servidor convertido a formato NetBIOS, por ejemplo:
\\SERVERNAME\MSSQLSERVER\MyDocumentDB
Es el valor predeterminado.
1
Devuelve el nombre del servidor sin la conversión, por ejemplo:
\\ServerName\MSSQLSERVER\MyDocumentDB
2
Devuelve la ruta de acceso al servidor completa, por ejemplo:
\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB
Tipo de valor devuelto
nvarchar(max)
Si la instancia de SQL Server está en clúster en un clúster de conmutación por error, el nombre de la máquina que se devuelve como parte de esta ruta de acceso es el nombre del host virtual de la instancia en clúster.
Cuando la base de datos pertenece a un grupo de disponibilidad AlwaysOn, la función FileTableRootPath devuelve el nombre de red virtual (VNN) en lugar del nombre del equipo.
Observaciones generales
La ruta de acceso que devuelve la función GetFileNamespacePath es una ruta de acceso lógica de directorio o archivo con el siguiente formato:
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...
Esta ruta de acceso lógica no se corresponde directamente con ningún objeto NTFS físico. El controlador de filtro del sistema de archivos de FILESTREAM y el agente FILESTREAM la traducen en la ruta de acceso física. Esta separación entre la ruta de acceso lógica y la ruta de acceso física permite a SQL Server reorganizar internamente los datos sin afectar a la validez de la ruta de acceso.
Procedimientos recomendados
Para mantener independientes del equipo y de la base de datos actuales el código y las aplicaciones, evite escribir código basado en rutas de acceso absolutas de archivos. En su lugar, obtenga la ruta de acceso completa de un archivo en tiempo de ejecución utilizando conjuntamente las funciones FileTableRootPath y GetFileNamespacePath, como se muestra en el siguiente ejemplo. De forma predeterminada, la función GetFileNamespacePath devuelve la ruta de acceso relativa del archivo en la ruta de acceso raíz de la base de datos.
USE MyDocumentDB;
@root varchar(100)
SELECT @root = FileTableRootPath();
@fullPath = varchar(1000);
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore
WHERE Name = N’document.docx’;
Ejemplos
En los ejemplos siguientes se muestra cómo llamar a la función GetFileNamespacePath para obtener la ruta de acceso UNC de un archivo o un directorio en un objeto 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\MyDocumentDB\MyFileTable\MyDocDirectory\document.docx”
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N’document.docx’;