Share via


Trabalhar com diretórios e caminhos em FileTables

Descreve a estrutura de diretórios na qual os arquivos são armazenados em FileTables.

Neste tópico

Desejo...

  • Trabalhar com diretórios e caminhos em FileTables

  • Usar caminhos relativos para código portátil

Saiba mais

  • Restrições importantes

    • Nível de aninhamento

    • Comprimento do nome do caminho completo

  • O caminho completo para um item armazenado em uma FileTable

  • A semântica dos diretórios raiz nos níveis de instância, banco de dados e FileTable

  • A coluna is_directory no esquema de FileTable

  • Usando VNNs (nomes de rede virtual) com grupos de disponibilidade AlwaysOn

Como trabalhar com diretórios e caminhos em FileTables

É possível usar as 3 funções a seguir para trabalhar com diretórios FileTable no Transact-SQL:

Para obter este resultado

Use esta função

Obtém o caminho UNC no nível raiz de uma FileTable específica ou do banco de dados atual.

FileTableRootPath (Transact-SQL)

Obtém um caminho UNC absoluto ou relativo de um arquivo ou diretório em uma FileTable.

GetFileNamespacePath (Transact-SQL)

Obtém a ID do localizador do caminho do arquivo ou diretório especificado em uma FileTable, fornecendo o caminho.

GetPathLocator (Transact-SQL)

[INÍCIO]

Como usar caminhos relativos para código portátil

Para manter código e aplicativos independentes do computador e do banco de dados atuais, evite escrever código baseado em caminhos de arquivo absolutos. Em vez disso, obtenha o caminho completo de um arquivo em tempo de execução com o uso das funções FileTableRootPath (Transact-SQL) e GetFileNamespacePath (Transact-SQL) juntas, conforme é mostrado no exemplo a seguir. Por padrão, a função GetFileNamespacePath retorna o caminho relativo do arquivo sob o caminho raiz do banco de dados.

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

[INÍCIO]

Restrições importantes

Nível de aninhamento

Observação importanteImportante

Você não pode armazenar mais de 15 níveis de subdiretórios no diretório FileTable. Quando você armazenar 15 níveis de subdiretórios, o nível mais baixo não poderá conter arquivos, pois esses arquivos representariam um nível adicional.

Comprimento do nome do caminho completo

Observação importanteImportante

O sistema de arquivos NTFS oferece suporte a nomes do caminho maiores do que o limite de 260 caracteres do shell do Windows e da maioria das APIs do Windows. Portanto, é possível criar arquivos na hierarquia de arquivos de um FileTable usando Transact-SQL que você não poderá exibir ou abrir com o Windows Explorer ou com muitos outros aplicativos do Windows, porque o nome do caminho completo excede 260 caracteres. Entretanto, é possível continuar a acessar esses arquivos usando o Transact-SQL.

O caminho completo para um item armazenado em uma FileTable

O caminho completo para um arquivo ou diretório armazenado em uma FileTable começa com os seguintes elementos:

  1. O compartilhamento habilitado para acesso de E/S de arquivos FILESTREAM no nível da instância do SQL Server.

  2. O DIRECTORY_NAME especificado no nível do banco de dados.

  3. O FILETABLE_DIRECTORY especificado no nível da FileTable.

A hierarquia resultante será semelhante a esta:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Essa hierarquia de diretórios forma a raiz de um namespace de arquivo da FileTable. Sob essa hierarquia de diretórios, os dados do FILESTREAM da FileTable são armazenados como arquivos e subdiretórios que também podem conter arquivos e subdiretórios.

É importante ter em mente que a hierarquia de diretórios criada sob o compartilhamento do FILESTREAM no nível da instância é uma hierarquia de diretórios virtuais. Essa hierarquia é armazenada no banco de dados do SQL Server e não é representada fisicamente no sistema de arquivos NTFS. Todas as operações que acessam arquivos e diretórios sob o compartilhamento do FILESTREAM e nas FileTables são interceptadas e tratadas por um componente do SQL Server inserido no sistema de arquivos.

[INÍCIO]

A semântica dos diretórios raiz nos níveis de instância, banco de dados e FileTable

Essa hierarquia de diretórios observa a seguinte semântica:

  • O compartilhamento do FILESTREAM do nível da instância é configurado por um administrador e armazenado como propriedade do servidor. Você pode renomear esse compartilhamento usando o SQL Server Configuration Manager. Uma operação de renomeação não entra em vigor até que o servidor seja reiniciado.

  • O nível do banco de dados DIRECTORY_NAME é nulo por padrão quando você cria um novo banco de dados. Um administrador pode definir ou alterar esse nome usando a instrução ALTER DATABASE. O nome deve ser exclusivo (em uma comparação sem diferenciação de maiúsculas e minúsculas) nessa instância.

  • Você fornece normalmente o nome FILETABLE_DIRECTORY como parte da instrução CREATE TABLE quando você cria uma FileTable. Você pode alterar esse nome usando o comando ALTER TABLE.

  • Você não pode renomear esses diretórios raiz por operações de E/S de arquivos.

  • Você não pode abrir esses diretórios raiz com identificadores de arquivo exclusivos.

[INÍCIO]

A coluna is_directory no esquema de FileTable

A tabela a seguir descreve a interação entre a coluna is_directory e a coluna file_stream que contém os dados do FILESTREAM em uma FileTable.

is_directory value

file_stream value

Comportamento

FALSE

NULL

Esta é uma combinação inválida que será capturada por uma restrição definida por sistema.

FALSE

<value>

O item representa um arquivo.

TRUE

NULL

O item representa um diretório.

TRUE

<value>

Esta é uma combinação inválida que será capturada por uma restrição definida por sistema.

[INÍCIO]

Usando VNNs (nomes de rede virtual) com grupos de disponibilidade AlwaysOn

Quando o banco de dados que contém dados FILESTREAM ou FileTable pertence a um grupo de disponibilidade AlwaysOn:

[INÍCIO]

Consulte também

Conceitos

Habilitar os pré-requisitos para FileTable

Criar, alterar e remover FileTables

Acessar FileTables com Transact-SQL

Acessar FileTables com APIs de E/S de arquivo