Caricamento di file in FileTableLoad Files into FileTables

Viene descritto come caricare o eseguire la migrazione dei file in tabelle FileTable.Describes how to load or migrate files into FileTables.

Caricamento o migrazione di file in tabelle FileTable Loading or Migrating Files into a FileTable

Il metodo scelto per il caricamento o la migrazione di file in una tabella FileTable dipende dalla posizione in cui sono attualmente archiviati i file.The method that you choose for loading or migrating files into a FileTable depends on where the files are currently stored.

Attuale posizione dei fileCurrent location of files Opzioni per migrazioneOptions for migration
I file sono attualmente archiviati nel file system.Files are currently stored in the file system.

SQL ServerSQL Server non dispone di conoscenza dei file. has no knowledge of the files.
Poiché una tabella FileTable viene visualizzata come cartella nel file system di Windows, è possibile caricare facilmente file in un nuova tabella FileTable tramite alcuni dei metodi disponibili per lo spostamento o la copia di file.Since a FileTable appears as a folder in the Windows file system, you can easily load files into a new FileTable by using any of the available methods for moving or copying files. Questi metodi includono Esplora risorse, opzioni della riga di comando come xcopy e robocopy e applicazioni o script personalizzati.These methods include Windows Explorer, command line options including xcopy and robocopy, and custom scripts or applications.

Non è possibile convertire una cartella esistente in tabella FileTable.You cannot convert an existing folder to a FileTable.
I file sono attualmente archiviati nel file system.Files are currently stored in the file system.

SQL ServerSQL Server include una tabella di metadati contenente puntatori ai file. contains a table of metadata that contains pointers to the files.
Il primo passaggio consiste nello spostare o copiare i file tramite uno dei metodi indicati in precedenza.The first step is to move or copy the files by using one of the methods mentioned above.

Il secondo passaggio consiste nell'aggiornare la tabella esistente di metadati in modo che punti alla nuova posizione dei file.The second step is to update the existing table of metadata to point to the new location of the files.

Per ulteriori informazioni, vedere Esempio: Migrazione di file dal file system in una tabella FileTable in questo argomento.For more information, see Example: Migrating Files from the File System into a FileTable in this topic.

Caricare file in una tabella FileTable How To: Load Files into a FileTable

Tra i metodi che è possibile utilizzare per caricare file in una tabella FileTable sono inclusi i seguenti:The methods that you can use to load files into a FileTable include the following:

  • Trascinare e rilasciare file dalle cartelle di origine alla nuova cartella FileTable in Esplora risorse.Drag and drop files from the source folders to the new FileTable folder in Windows Explorer.

  • Utilizzare opzioni della riga di comando quali MOVE, COPY, XCOPY o ROBOCOPY dal prompt dei comandi o in un file batch o uno script.Use command line options such as MOVE, COPY, XCOPY, or ROBOCOPY from the command prompt or in a batch file or script.

  • Scrivere un'applicazione personalizzata in C# o Visual Basic.NET che utilizzi metodi dello spazio dei nomi System.IO per spostare o copiare i file.Write a custom application in C# or Visual Basic.NET that uses methods from the System.IO namespace to move or copy the files.

Esempio: Migrazione di file dal file system in una tabella FileTable Example: Migrating Files from the File System into a FileTable

In questo scenario i file vengono archiviati nel file system ed è disponibile una tabella di metadati in SQL ServerSQL Server contenente puntatori ai file.In this scenario, your files are stored in the file system, and you have a table of metadata in SQL ServerSQL Server that contains pointers to the files. Si desidera spostare i file in una tabella FileTable, quindi sostituire il percorso UNC originale per ogni file nei metadati con il percorso UNC della tabella FileTable.You want to move the files into a FileTable, and then replace the original UNC path for each file in the metadata with the FileTable UNC path. La funzione GetPathLocator (Transact-SQL) consente di raggiungere tale obiettivo.The GetPathLocator (Transact-SQL) function helps you to achieve this goal.

Per questo esempio, si supponga la disponibilità di una tabella di database esistente, denominata PhotoMetadata, che contiene dati su fotografie.For this example, assume that there is an existing database table, PhotoMetadata, which contains data about photographs. Questa tabella include una colonna UNCPath di tipo varchar(512) contenente il percorso UNC effettivo di un file con estensione jpg.This table has a column UNCPath of type varchar(512) which contains the actual UNC path to a .jpg file.

Per eseguire la migrazione dei file di immagine dal file system in una tabella FileTable, è necessario effettuare le operazioni seguenti:To migrate the image files from the file system into a FileTable, you have to do the following:

  1. Creare una nuova tabella FileTable che contenga i file.Create a new FileTable to hold the files. In questo esempio si usa il nome di tabella dbo.PhotoTablema non viene illustrato il codice per creare la tabella.This example uses the table name, dbo.PhotoTable, but does not show the code to create the table.

  2. Utilizzare xcopy o uno strumento simile per copiare i file JPG, con la relativa struttura di directory, nella directory radice della tabella FileTable.Use xcopy or a similar tool to copy the .jpg files, with their directory structure, into the root directory of the FileTable.

  3. Correggere i metadati nella tabella PhotoMetadata tramite codice simile al seguente:Fix the metadata in the PhotoMetadata table, by using code similar to the following:

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

Caricamento bulk di file in una tabella FileTable Bulk Loading Files into a FileTable

Una tabella FileTable si comporta come una normale tabella per operazioni bulk, con le caratteristiche seguenti.A FileTable behaves like a normal table for bulk operations, with the following qualifications.

Una tabella FileTable include vincoli definiti dal sistema che garantiscono l'integrità dello spazio dei nomi di file/directory.A FileTable has system-defined constraints which ensure that the integrity of the file and directory namespace is maintained. È necessario verificare questi vincoli per i dati caricati in bulk nella tabella FileTable.These constraints have to be verified on the data bulk loaded into the FileTable. Poiché alcune operazioni di inserimento bulk consentono di ignorare i vincoli di tabella, si applicano i requisiti seguenti.Since some bulk insert operations allow table constraints to be ignored, the following requirements are enforced.

  • Le operazioni di caricamento bulk che impongono vincoli possono essere eseguite su una tabella FileTable esattamente come su qualsiasi altra tabella.Bulk loading operations that enforce constraints can be run against a FileTable as against any other table. Questa categoria include le operazioni seguenti:This category includes the following operations:

    • bcp con clausola CHECK_CONSTRAINTS.bcp with CHECK_CONSTRAINTS clause.

    • BULK INSERT con clausola CHECK_CONSTRAINTS.BULK INSERT with CHECK_CONSTRAINTS clause.

    • INSERT INTO …INSERT INTO … SELECT * FROM OPENROWSET(BULK …) senza la clausola IGNORE_CONSTRAINTS.SELECT * FROM OPENROWSET(BULK …) without IGNORE_CONSTRAINTS clause.

  • Le operazioni di caricamento bulk che non applicano vincoli hanno esito negativo a meno i vincoli definiti dal sistema della tabella FileTable non siano stati disabilitati.Bulk loading operations that do not enforce constraints fail unless the FileTable system-defined constraints have been disabled. Questa categoria include le operazioni seguenti:This category includes the following operations:

    • bcp senza clausola CHECK_CONSTRAINTS.bcp without CHECK_CONSTRAINTS clause.

    • BULK INSERT senza clausola CHECK_CONSTRAINTS.BULK INSERT without CHECK_CONSTRAINTS clause.

    • INSERT INTO …INSERT INTO … SELECT * FROM OPENROWSET(BULK …) con la clausola IGNORE_CONSTRAINTS.SELECT * FROM OPENROWSET(BULK …) with IGNORE_CONSTRAINTS clause.

Procedura: Caricamento bulk di file in una tabella FileTable How To: Bulk Load Files into a FileTable

È possibile utilizzare diversi metodi per eseguire il caricamento bulk di file in una tabella FileTable:You can use various methods to bulk load files into a FileTable:

  • bcpbcp

    • Eseguire una chiamata con la clausola CHECK_CONSTRAINTS .Call with the CHECK_CONSTRAINTS clause.

    • Disabilitare lo spazio dei nomi FileTable ed eseguire una chiamata senza la clausola CHECK_CONSTRAINTS .Disable the FileTable namespace and call without the CHECK_CONSTRAINTS clause. Riabilitare quindi lo spazio dei nomi FileTable.Then re-enable the FileTable namespace.

  • BULK INSERTBULK INSERT

    • Eseguire una chiamata con la clausola CHECK_CONSTRAINTS .Call with the CHECK_CONSTRAINTS clause.

    • Disabilitare lo spazio dei nomi FileTable ed eseguire una chiamata senza la clausola CHECK_CONSTRAINTS .Disable the FileTable namespace and call without the CHECK_CONSTRAINTS clause. Riabilitare quindi lo spazio dei nomi FileTable.Then re-enable the FileTable namespace.

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

    • Eseguire una chiamata con la clausola IGNORE_CONSTRAINTS .Call with the IGNORE_CONSTRAINTS clause.

    • Disabilitare lo spazio dei nomi FileTable ed eseguire una chiamata senza la clausola IGNORE_CONSTRAINTS .Disable the FileTable namespace and call without the IGNORE_CONSTRAINTS clause. Riabilitare quindi lo spazio dei nomi FileTable.Then re-enable the FileTable namespace.

    Per informazioni su come disabilitare i vincoli FileTable, vedere Gestire le tabelle FileTable.For information about disabling the FileTable constraints, see Manage FileTables.

Procedura: Disabilitare i vincoli FileTable per il caricamento bulk How To: Disable FileTable Constraints for Bulk Loading

Per eseguire il caricamento bulk di file in una tabella FileTable senza la necessità di applicare vincoli definiti dal sistema, è possibile disabilitare temporaneamente i vincoli.To bulk load files into a FileTable without the overhead of enforcing the system-defined constraints, you can temporarily disable the constraints. Per altre informazioni, vedere Gestire le tabelle FileTable.For more information, see Manage FileTables.

Vedere ancheSee Also

Accesso a tabelle FileTable tramite Transact-SQL Access FileTables with Transact-SQL
Accedere alle tabelle FileTable con API di Input-Output dei fileAccess FileTables with File Input-Output APIs