Partilhar via


Carregar arquivos em FileTables

Aplica-se a:SQL Server

Descreve como carregar ou migrar arquivos para FileTables.

Carregar ou migrar arquivos para uma FileTable

O método escolhido para carregar ou migrar arquivos para uma FileTable depende de onde os arquivos estão armazenados no momento.

Localização atual dos arquivos Opções de migração
Atualmente, os arquivos são armazenados no sistema de arquivos.

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

Não é possível converter uma pasta existente em uma FileTable.
Atualmente, os arquivos são armazenados no sistema de arquivos.

O SQL Server contém uma tabela de metadados que contém ponteiros para os arquivos.
O primeiro passo é mover ou copiar os arquivos usando um dos métodos mencionados anteriormente.

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 ficheiros do sistema de ficheiros para um FileTable neste artigo.

Como: Carregar arquivos em uma FileTable

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

  • Arraste e solte arquivos das pastas de origem para a nova pasta FileTable no Windows Explorer.

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

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

Exemplo: Migrar arquivos do sistema de arquivos para uma FileTable

Nesse 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 TabelaArquivo e, em seguida, substituir o caminho UNC original de cada ficheiro nos metadados pelo caminho UNC da TabelaArquivo. A função GetPathLocator ajuda você a atingir esse objetivo.

Para este exemplo, suponha que há uma tabela de banco de dados existente, PhotoMetadata, que contém dados sobre fotografias. Esta 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ê precisa 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 sua estrutura de diretório, para o diretório raiz da FileTable.

  3. Corrija os metadados na tabela PhotoMetadata, usando código semelhante ao exemplo a seguir:

--  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 uma FileTable

Uma FileTable se comporta como uma tabela normal para operações em massa. Uma FileTable tem restrições definidas pelo sistema que garantem que a integridade do namespace de arquivo e diretório seja mantida. Essas restrições devem ser verificadas nos dados carregados em massa na FileTable. Como algumas operações de inserção em massa permitem que as restrições de tabela sejam ignoradas, 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. Esta categoria inclui as seguintes operações:

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

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

Como: Carregar arquivos em massa em uma FileTable

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

Faça a chamada com a cláusula CHECK_CONSTRAINTS.

Desative o namespace FileTable e chame sem a cláusula CHECK_CONSTRAINTS. Em seguida, reative o namespace FileTable.

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

Como: Desativar restrições FileTable para carregamento em massa

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