Trabajar con directorios y rutas de acceso de FileTables
Describe la estructura de directorios en la que los archivos se almacenan en FileTables.
En este tema
Deseo…
Trabajar con directorios y rutas de acceso de FileTables
Usar rutas de acceso relativas para el código portable
Más información
Restricciones relevantes
Nivel de anidamiento
Longitud del nombre completo de la ruta de acceso
Ruta de acceso completa a un elemento almacenado en una FileTable
Semántica de los directorios raíz en los niveles de instancia, base de datos y FileTable
La columna is_directory del esquema de FileTable
Usar nombres de red virtual (VNN) con grupos de disponibilidad AlwaysOn
Trabajar con directorios y rutas de acceso de FileTables
Puede usar las tres funciones que se indican a continuación para trabajar con directorios de FileTable en Transact-SQL:
Para obtener este resultado |
Use esta función |
---|---|
Obtener la ruta de acceso UNC en el nivel de raíz de una FileTable específica o de la base de datos actual. |
|
Obtener una ruta de acceso UNC absoluta o relativa de un archivo o directorio de una FileTable. |
|
Obtener el valor del identificador del localizador de ruta de acceso del archivo o directorio especificado en una FileTable proporcionando la ruta de acceso. |
[ARRIBA]
Usar rutas de acceso relativas para el código portable
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 (Transact-SQL) y GetFileNamespacePath (Transact-SQL), 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 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
[ARRIBA]
Restricciones relevantes
Nivel de anidamiento
Importante |
---|
No puede almacenar más de 15 niveles de subdirectorios en el directorio de FileTable. Si se almacenan 15 niveles de subdirectorios, el nivel inferior no podrá contener los archivos, ya que estos archivos representarían un nivel adicional. |
Longitud del nombre completo de la ruta de acceso
Importante |
---|
El sistema de archivos NTFS admite nombres de ruta de acceso con una longitud mayor que el límite de 260 caracteres del shell de Windows y la mayoría de las API de Windows. Por consiguiente, es posible que al crear archivos en la jerarquía de archivos de un objeto FileTable con Transact-SQL no pueda verlos ni abrirlos con el Explorador de Windows o muchas otras aplicaciones Windows, porque el nombre completo de la ruta de acceso supera los 260 caracteres. Sin embargo, puede seguir teniendo acceso a estos archivos mediante Transact-SQL. |
Ruta de acceso completa a un elemento almacenado en una FileTable
La ruta de acceso completa a un archivo o directorio almacenado en una FileTable comienza con los elementos siguientes:
El recurso compartido habilitado para el acceso de E/S de archivos de FILESTREAM en el nivel de la instancia de SQL Server.
El valor de DIRECTORY_NAME especificado en el nivel de la base de datos.
El valor de FILETABLE_DIRECTORY especificado en el nivel de FileTable.
La jerarquía resultante ofrece el siguiente aspecto:
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\
Esta jerarquía de directorios constituye la raíz del espacio de nombres de archivo de la FileTable. En esta jerarquía de directorios, los datos de FILESTREAM de la FileTable se almacenan como archivos y como subdirectorios, que, a su vez, pueden contener archivos y subdirectorios.
Es importante tener en cuenta que la jerarquía de directorios creada en el recurso compartido de FILESTREAM en el nivel de instancia es una jerarquía de directorios virtual. Esta jerarquía se almacena en la base de datos de SQL Server y no se representa físicamente en el sistema de archivos NTFS. Todas las operaciones que tienen acceso a los archivos y directorios situados en el recurso compartido de FILESTREAM y en las FileTables que contiene se interceptan y controlan mediante un componente de SQL Server incrustado en el sistema de archivos.
[ARRIBA]
Semántica de los directorios raíz en los niveles de instancia, base de datos y FileTable
Esta jerarquía de directorios se ajusta a la semántica siguiente:
El recurso compartido de FILESTREAM en el nivel de instancia lo configura un administrador y se almacena como una propiedad del servidor. Puede cambiar el nombre de este recurso compartido a través del Administrador de configuración de SQL Server. Una operación de cambio de nombre no surtirá efecto hasta que se reinicie el servidor.
De manera predeterminada, el valor DIRECTORY_NAME en el nivel de base de datos es NULL cuando se crea una nueva base de datos. Un administrador puede establecer o cambiar este nombre mediante la instrucción ALTER DATABASE. El nombre debe ser único (en una comparación sin distinción entre mayúsculas y minúsculas) en esa instancia.
Normalmente, proporcionará el nombre FILETABLE_DIRECTORY como parte de la instrucción CREATE TABLE cuando cree una FileTable. Puede cambiar este nombre mediante el comando ALTER TABLE.
No puede cambiar el nombre de estos directorios raíz a través de operaciones de E/S de archivos.
No puede abrir estos directorios raíz con identificadores de archivo exclusivos.
[ARRIBA]
Columna is_directory del esquema de la FileTable
En la tabla siguiente se describe la interacción entre la columna is_directory y la columna file_stream que contiene los datos FILESTREAM de un objeto FileTable.
valor de is_directory |
valor de file_stream |
Comportamiento |
FALSE |
NULL |
Esta combinación no es válida y la detectará una restricción definida por el sistema. |
FALSE |
<value> |
El elemento representa un archivo. |
TRUE |
NULL |
El elemento representa un directorio. |
TRUE |
<value> |
Esta combinación no es válida y la detectará una restricción definida por el sistema. |
[ARRIBA]
Usar nombres de red virtual (VNN) con grupos de disponibilidad AlwaysOn
Cuando la base de datos que contiene datos de FILESTREAM o FileTable pertenece a un grupo de disponibilidad AlwaysOn:
Las funciones FILESTREAM y FileTable aceptan o devuelven nombres de red virtual (VNN) en lugar de nombres de equipo. Para obtener más información acerca de estas funciones, vea Funciones FILESTREAM y FileTable (Transact-SQL).
Todo acceso a los datos de FILESTREAM o FileTable a través de las API del sistema de archivos debe utilizar VNN en lugar de nombres de equipo. Para obtener más información, vea FILESTREAM y FileTable con grupos de disponibilidad AlwaysOn (SQL Server).
[ARRIBA]
Vea también
Conceptos
Habilitar los requisitos previos de FileTables
Crear, modificar y quitar FileTables