Trabajar con directorios y rutas en FileTables

Se aplica a:SQL Server

Describe la estructura de directorios en la que los archivos se almacenan en FileTables.

Trabajar con directorios y rutas de acceso de FileTables

Puedes 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. FileTableRootPath (Transact-SQL)
Obtener una ruta de acceso UNC absoluta o relativa de un archivo o directorio de una FileTable. GetFileNamespacePath (Transact-SQL)
Obtener el valor del identificador del localizador de ruta de acceso del archivo o directorio especificado en una FileTable proporcionando la ruta de acceso. GetPathLocator (Transact-SQL)

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 usando 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

Limitaciones

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:

  1. El recurso compartido habilitado para el acceso de E/S de archivos de FILESTREAM en el nivel de la instancia de SQL Server.

  2. El valor de DIRECTORY_NAME especificado en el nivel de la base de datos.

  3. 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 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.

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.

  • El valor de DIRECTORY_NAME en el nivel de base de datos es NULL de manera predeterminada 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ás el nombre FILETABLE_DIRECTORY como parte de la instrucción CREATE TABLE cuando crees un objeto FileTable. Puedes cambiar este nombre mediante el comando ALTER TABLE.

  • No puedes cambiar el nombre de estos directorios raíz a través de operaciones de E/S de archivos.

  • No puedes abrir estos directorios raíz con identificadores de archivo exclusivos.

Columna is_directory del esquema de la FileTable

En la siguiente tabla 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 is_directory Valor 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.

Usar nombres de red virtual (VNN) con grupos de disponibilidad Always On

Si la base de datos que contiene datos de FILESTREAM o FileTable pertenece a un grupo de disponibilidad: