Compartilhar via


Carregar arquivos em FileTables

Descreve como carregar ou migrar arquivos para FileTables.

Carregando ou migrando 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.

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 Windows Explorer, opções de linha de comando, inclusive xcopy e robocopy, e scripts ou aplicativos personalizados.

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

SQL Server contém uma tabela de metadados que contém 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: migrando arquivos do sistema de arquivos para uma FileTable neste tópico.

Como carregar arquivos em uma nova FileTable

Os métodos que você pode usar para carregar arquivos em uma FileTable incluem os seguintes:

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

  • Usar opções de linha de comando, como MOVE, COPY, XCOPY ou ROBOCOPY, no prompt de comando ou em um arquivo em lotes ou script.

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

Exemplo: migrando 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 em 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 (Transact-SQL) ajuda você a atingir essa meta.

Para este exemplo, suponha que haja uma tabela de banco de dados existente, PhotoMetadata, que contém dados sobre fotografias. Esta tabela tem um 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 de 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 da FileTable.

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

--  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);  

Carregando arquivos em massa em uma FileTable

Um FileTable tem o comportamento semelhante ao de uma tabela normal para operações em massa, com as qualificações a seguir.

Uma FileTable possui 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 de tamanho que não impõem restrições falham a menos que as restrições definidas pelo sistema da FileTable sejam 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.

Como carregar arquivos em massa em uma FileTable

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

  • bcp

    • 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.

  • BULK INSERT

    • 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.

  • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)

    • Chame com a cláusula IGNORE_CONSTRAINTS .

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

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

Como 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.

Consulte Também

Acessar FileTables com Transact-SQL
Acessar FileTables com APIs de entrada e saída de arquivo