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:
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 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ónALTER 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ónCREATE TABLE
cuando crees un objeto FileTable. Puedes cambiar este nombre mediante el comandoALTER 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:
Las funciones FILESTREAM y FileTable aceptan o devuelven nombres de red virtual (VNN) en lugar de nombres de equipo. Para más información sobre estas funciones, consulte 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).