Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Descreve a estrutura de diretórios na qual os arquivos são armazenados em FileTables.
Como: Trabalhar com diretórios e caminhos em FileTables
Você pode usar as três funções a seguir para trabalhar com diretórios FileTable no Transact-SQL:
| Para obter este resultado | Use esta função |
|---|---|
| Obtenha o caminho UNC de nível raiz para uma FileTable específica ou para o banco de dados atual. | FileTableRootPath (Transact-SQL) |
| Obtenha um caminho UNC absoluto ou relativo para um arquivo ou diretório em uma FileTable. | GetFileNamespacePath (Transact-SQL) |
| Obtenha o valor de ID do localizador de caminho para o arquivo ou diretório especificado em uma FileTable, fornecendo o caminho. | GetPathLocator (Transact-SQL) |
Use caminhos relativos para um código portátil
Para manter o código e os aplicativos independentes do computador e do banco de dados atuais, evite escrever código que dependa de caminhos de arquivo absolutos. Em vez disso, obtenha o caminho completo para um ficheiro em tempo de execução utilizando as funções FileTableRootPath (Transact-SQL) e GetFileNamespacePath (Transact-SQL)) em conjunto, como 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
Limitações
Nível de ninho
Importante
Não é possível armazenar mais de 15 níveis de subdiretórios no diretório FileTable. Quando você armazena 15 níveis de subdiretórios, o nível mais baixo não pode conter arquivos, pois esses arquivos representariam um nível adicional.
Comprimento do nome completo do caminho
Importante
O sistema de arquivos NTFS oferece suporte a nomes de caminho muito 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 uma FileTable usando Transact-SQL que você não pode exibir ou abrir com o Windows Explorer ou muitos outros aplicativos do Windows, porque o nome do caminho completo excede 260 caracteres. No entanto, você pode continuar a acessar esses arquivos usando 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:
A partilha ativada para acesso E/S de ficheiro FILESTREAM ao nível da instância do SQL Server.
O
DIRECTORY_NAMEé especificado ao nível do banco de dados.O
FILETABLE_DIRECTORYespecificado no nível FileTable.
A hierarquia resultante tem esta aparência:
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\
Essa hierarquia de diretórios forma a raiz do namespace de arquivo FileTable. Sob essa hierarquia de diretórios, os dados FILESTREAM para a FileTable são armazenados como arquivos e como 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 FILESTREAM no nível da instância é uma hierarquia de diretório virtual. 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 no compartilhamento FILESTREAM e nas FileTables que ele contém são intercetadas e manipuladas por um componente do SQL Server incorporado no sistema de arquivos.
A semântica dos diretórios raiz nos níveis de instância, banco de dados e FileTable
Esta hierarquia de diretórios observa a seguinte semântica:
O compartilhamento FILESTREAM no nível da instância é configurado por um administrador e armazenado como uma propriedade do servidor. Você pode renomear esse compartilhamento usando o SQL Server Configuration Manager. Uma operação de renomeação não terá efeito até que o servidor seja reiniciado.
O
DIRECTORY_NAMEde nível de banco de dados é nulo por padrão quando você cria um novo banco de dados. Um administrador pode definir ou alterar esse nome usando a instruçãoALTER DATABASE. O nome deve ser único (em uma comparação sem distinção entre maiúsculas e minúsculas) nesse caso específico.Normalmente, você fornece o nome do
FILETABLE_DIRECTORYcomo parte da instruçãoCREATE TABLEquando cria uma FileTable. Você pode alterar esse nome usando o comandoALTER TABLE.Não é possível renomear esses diretórios raiz por meio de operações de E/S de arquivo.
Não é possível abrir esses diretórios raiz com identificadores de arquivo exclusivos.
A coluna is_directory no esquema FileTable
A tabela a seguir descreve a interação entre a coluna is_directory e a coluna file_stream que contém os dados FILESTREAM em uma FileTable.
| is_directory valor | Valor fluxo_de_arquivo | Comportamento |
|---|---|---|
FALSE |
NULL |
Esta é uma combinação inválida que é capturada por uma restrição definida pelo 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 é capturada por uma restrição definida pelo sistema. |
Usar Nomes de Rede Virtual (VNNs) com Grupos de Disponibilidade Always On
Quando o banco de dados que contém dados FILESTREAM ou FileTable pertence a um grupo de disponibilidade:
As funções FILESTREAM e FileTable aceitam ou retornam nomes de rede virtual (VNNs) em vez de nomes de computador. Para obter mais informações sobre essas funções, consulte funções FILESTREAM e FileTable (Transact-SQL).
Todo o acesso a dados FILESTREAM ou FileTable através das APIs do sistema de arquivos deve usar VNNs em vez de nomes de computador. Para obter mais informações, consulte FILESTREAM e FileTable com Grupos de Disponibilidade Sempre Ativos (SQL Server).