Carregar arquivos para FileTables

Aplica-se a: SQL Server

Descreve como carregar ou migrar arquivos para FileTables.

Carregar ou migrar arquivos para um FileTable

O método que você escolhe para carregar ou migrar arquivos para uma FileTable depende em onde os arquivos estão armazenados atualmente.

Localização atual dos arquivos Opções de migração
Os arquivos estão atualmente armazenados no sistema de arquivos.

O SQL Server não tem conhecimento dos arquivos.
Como uma FileTable é semelhante a uma pasta no sistema de arquivos do Windows, você pode carregar arquivos com facilidade em uma nova FileTable usando qualquer um dos métodos disponíveis para mover ou copiar arquivos. Esses métodos incluem o Explorador de Arquivos, opções de linha de comando, inclusive xcopy e robocopy, além de scripts ou aplicativos personalizados.

Você não pode converter uma pasta existente em um FileTable.
Os arquivos estão atualmente armazenados no sistema de arquivos.

O SQL Server contém uma tabela de metadados que possui ponteiros para os arquivos.
A primeira etapa é mover ou copiar os arquivos usando um dos métodos mencionados acima.

A segunda etapa é atualizar a tabela existente de metadados para apontar para o novo local dos arquivos.

Para obter mais informações, consulte Exemplo: migrar arquivos do sistema de arquivos para um FileTable neste artigo.

Instruções: carregar arquivos em um FileTable

Você pode usar os seguintes métodos para carregar arquivos em uma FileTable:

  • Arrastar e soltar arquivos das pastas de origem para a pasta da nova FileTable no Windows Explorer.

  • Usar opções de linha de comando, tais como move, copy, xcopy ou robocopy, no prompt de comando ou em um script ou arquivo em lotes.

  • Escrever um aplicativo personalizado para mover ou copiar os arquivos em C# ou no Visual Basic .NET. Chamar métodos do namespace System.IO.

Exemplo: migrar arquivos do sistema de arquivos para um FileTable

Neste cenário, seus arquivos são armazenados no sistema de arquivos, e você tem uma tabela de metadados no SQL Server que contém ponteiros para os arquivos. Você deseja mover os arquivos para uma FileTable e, em seguida, substituir o caminho UNC original de cada arquivo dos metadados pelo caminho UNC da FileTable. A função GetPathLocator ajuda você a atingir esse objetivo.

Para este exemplo, suponha a existência de uma tabela de banco de dados, PhotoMetadata, contendo dados sobre fotografias. Essa tabela tem uma coluna UNCPath do tipo varchar(512) que contém o caminho UNC real para um arquivo .jpg.

Para migrar os arquivos de imagem do sistema de arquivos para uma FileTable, você deve fazer o seguinte:

  1. Crie uma nova FileTable para armazenar os arquivos. Este exemplo usa o nome da tabela dbo.PhotoTable, mas não mostra o código para criar a tabela.

  2. Use xcopy ou uma ferramenta semelhante para copiar os arquivos .jpg, com a respectiva estrutura de diretórios, no diretório raiz do FileTable.

  3. Corrija os metadados na tabela PhotoMetadata usando um código semelhante ao seguinte exemplo:

--  Add a path locator column to the PhotoMetadata table.
ALTER TABLE PhotoMetadata ADD pathlocator HIERARCHYID;

-- Get the root path of the Photo directory on the File Server.
DECLARE @UNCPathRoot VARCHAR(100) = '\\RemoteShare\Photographs';

-- Get the root path of the FileTable.
DECLARE @FileTableRoot VARCHAR(1000);

SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');

-- Update the PhotoMetadata table.
-- Replace the File Server UNC path with the FileTable path.
UPDATE PhotoMetadata
SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);

-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.
UPDATE PhotoMetadata
SET pathlocator = GetPathLocator(UNCPath);

Carregar arquivos em massa em um FileTable

Um FileTable se comporta como uma tabela normal para operações em massa. Uma FileTable tem restrições definidas pelo sistema que assegura que a integridade do namespace de arquivo e diretório seja mantida. Essas restrições têm de ser verificadas nos dados carregados em massa na FileTable. Algumas operações de inserção em massa permitem ignorar as restrições de tabela. Os requisitos a seguir são impostos.

  • As operações de carregamento em massa que impõem restrições podem ser executadas em uma FileTable como em qualquer outra tabela. Essa categoria inclui as seguintes operações:

    • bcp com a cláusula CHECK_CONSTRAINTS.
    • BULK INSERT com a cláusula CHECK_CONSTRAINTS.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) sem a cláusula IGNORE_CONSTRAINTS.
  • Operações de carregamento em massa que não impõem restrições falham a menos que as restrições definidas pelo sistema da FileTable estejam desabilitadas. Essa categoria inclui as seguintes operações:

    • bcp sem a cláusula CHECK_CONSTRAINTS.
    • BULK INSERT sem a cláusula CHECK_CONSTRAINTS.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) com a cláusula IGNORE_CONSTRAINTS.

Instruções: carregar arquivos em massa em um FileTable

Você pode usar vários métodos para carregar arquivos em massa em uma FileTable:

Chame com a cláusula CHECK_CONSTRAINTS.

Desabilite o namespace da FileTable e chame sem a cláusula CHECK_CONSTRAINTS. Em seguida, reabilite o namespace da FileTable.

Para obter informações sobre como desabilitar as restrições de FileTable, consulte Gerenciar FileTables.

Instruções: desabilitar restrições de FileTable para carregamento em massa

Para carregar os arquivos em massa em uma FileTable sem a sobrecarga de impor as restrições definidas pelo sistema, você pode desabilitar temporariamente as restrições. Para obter mais informações, consulte Gerenciar FileTables.