Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descreve como carregar ou migrar arquivos para FileTables.
Carregando ou migrando 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.
| Local 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 facilmente carregar 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. Você não pode 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. |
A primeira etapa é mover ou copiar os arquivos usando um dos métodos mencionados acima. A segunda etapa é atualizar a tabela de metadados existente 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 FileTable
Os métodos que você pode usar para carregar arquivos em uma FileTable incluem o seguinte:
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, XCOPY ou ROBOCOPY no prompt de comando ou em um arquivo ou script em lote.
Escreva um aplicativo personalizado no C# ou no Visual Basic.NET que usa 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 no SQL Server que contém ponteiros para os arquivos. Você quer mover os arquivos para uma FileTable e, em seguida, substituir o caminho UNC original de cada arquivo nos 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, PhotoMetadataque 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:
Crie uma nova FileTable para armazenar os arquivos. Este exemplo usa o nome da tabela,
dbo.PhotoTablemas não mostra o código para criar a tabela.Use o xcopy ou uma ferramenta semelhante para copiar os arquivos .jpg, com sua estrutura de diretório, no diretório raiz da FileTable.
Corrija os metadados na
PhotoMetadatatabela usando um 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
Uma FileTable se comporta como uma tabela normal para operações em massa, com as qualificações a seguir.
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 precisam 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.
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 cláusula CHECK_CONSTRAINTS.
BULK INSERT com cláusula CHECK_CONSTRAINTS.
INSERT INTO... SELECT * FROM OPENROWSET(BULK ...) sem cláusula IGNORE_CONSTRAINTS.
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 tenham sido desabilitadas. Essa categoria inclui as seguintes operações:
bcp sem 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 FileTable e chame sem a cláusula CHECK_CONSTRAINTS . Em seguida, habilite novamente o namespace FileTable.
BULK INSERT
Chame com a cláusula CHECK_CONSTRAINTS.
Desabilite o namespace FileTable e chame sem a cláusula CHECK_CONSTRAINTS . Em seguida, habilite novamente o namespace FileTable.
INSERT INTO... SELECT * FROM OPENROWSET(BULK ...)
Chame com a cláusula IGNORE_CONSTRAINTS.
Desabilite o namespace FileTable e chame sem a cláusula IGNORE_CONSTRAINTS . Em seguida, habilite novamente o namespace FileTable.
Para obter informações sobre como desabilitar as restrições FileTable, consulte Gerenciar FileTables.
Como desabilitar as restrições FileTable para o carregamento em massa
Para carregar 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