Compartir a través de


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.

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)

[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

Nota importanteImportante

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

Nota importanteImportante

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

[ARRIBA]

Vea también

Conceptos

Habilitar los requisitos previos de FileTables

Crear, modificar y quitar FileTables

Obtener acceso a FileTables con Transact-SQL

Obtener acceso a las API de E/S de archivo