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:
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.Use xcopy ou uma ferramenta semelhante para copiar os arquivos .jpg, com a respectiva estrutura de diretórios, no diretório raiz da FileTable.
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