GetFileNamespacePath (Transact-SQL)
Se aplica a: SQL Server
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
El nombre de columna de la columna VARBINARY(MAX) file_stream en una FileTable.
El valor de nombre de columna 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 siguientes valores:
Valor | Descripción |
---|---|
0 | Devuelve la ruta de acceso relativa al directorio de base de datos. Este 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 siguientes valores:
Valor | Descripción |
---|---|
0 | Devuelve el nombre del servidor convertido a formato NetBIOS, por ejemplo:\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase Este es el valor predeterminado. |
1 | Devuelve el nombre del servidor sin la conversión, por ejemplo:\\ServerName\MSSQLSERVER\MyDocumentDatabase |
2 | Devuelve la ruta de acceso al servidor completa, por ejemplo:\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase |
Tipo devuelto
nvarchar(max)
Si la instancia de SQL Server se agrupa 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 de 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.
Notas generales
La ruta de acceso que devuelve la función GetFileNamespacePath es un directorio lógico o ruta de acceso de archivo en el formato siguiente:
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...
Esta ruta lógica no se corresponde directamente con una ruta de acceso NTFS física. Se traduce a la ruta de acceso física mediante el controlador de filtro del sistema de archivos de FILESTREAM y el agente de FILESTREAM. Esta separación entre la ruta de acceso lógica y la ruta de acceso física permite a SQL Server reorganizar los datos internamente 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 mediante las funciones FileTableRootPath y GetFileNamespacePath juntas, como se muestra en el ejemplo siguiente. 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 MyDocumentDatabase;
@root varchar(100)
SELECT @root = FileTableRootPath();
@fullPath = varchar(1000);
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore
WHERE Name = N'document.docx';
Comentarios
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 directorio en una 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';