Condividi tramite


Caricare file nelle tabelle *FileTable*

Viene descritto come caricare o eseguire la migrazione dei file in tabelle FileTable.

Caricamento o migrazione di file in una tabella 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.

Attuale posizione dei file Opzioni per migrazione
I file sono attualmente archiviati nel file system.

SQL Server non dispone di conoscenza dei file.
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. Questi metodi includono Esplora file, opzioni della riga di comando tra cui xcopy e robocopy, e script o applicazioni personalizzati.

Non è possibile convertire una cartella esistente in una tabella FileTable.
I file sono attualmente archiviati nel file system.

SQL Server contiene una tabella di metadati contenente puntatori ai file.
Il primo passaggio consiste nello spostare o copiare i file usando uno dei metodi indicati in precedenza.

Il secondo passaggio consiste nell'aggiornare la tabella esistente di metadati in modo che punti alla nuova posizione dei file.

Per altre informazioni, vedere Esempio: Migrazione di file dal file system in una tabella FileTable in questo argomento.

Come caricare file in una tabella FileTable

I metodi che è possibile usare per caricare i file in una tabella FileTable includono quanto segue:

  • Trascina e rilascia i file dalle cartelle di origine alla nuova cartella FileTable in Esplora risorse.

  • Usare opzioni della riga di comando, ad esempio MOVE, COPY, XCOPY o ROBOCOPY nel prompt dei comandi o in uno script o file batch.

  • Scrivere un'applicazione personalizzata in C# o Visual Basic.NET che usa metodi dello spazio dei nomi System.IO per spostare o copiare i file.

Esempio: Migrazione di file dal file system a una tabella FileTable

In questo scenario i file vengono archiviati nel file system ed è disponibile una tabella di metadati in SQL Server contenente puntatori ai file. 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. La funzione GetPathLocator (Transact-SQL) consente di raggiungere questo obiettivo.

Per questo esempio, si supponga che sia presente una tabella di database esistente, PhotoMetadata, che contiene dati sulle fotografie. Questa tabella contiene una colonna UNCPath di tipo varchar(512) che contiene il percorso UNC effettivo di un file .jpg.

Per eseguire la migrazione dei file di immagine dal file system in una tabella FileTable, è necessario eseguire le operazioni seguenti:

  1. Creare una nuova tabella FileTable che contenga i file. In questo esempio viene utilizzato il nome della tabella , dbo.PhotoTable, ma non viene visualizzato il codice per creare la tabella.

  2. Usare xcopy o uno strumento simile per copiare i file .jpg, con la relativa struttura di directory, nella directory principale di FileTable.

  3. Correggere i metadati nella PhotoMetadata tabella usando codice simile al seguente:

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

Una tabella FileTable si comporta come una normale tabella per le operazioni in blocco, con le qualificazioni seguenti.

Una tabella FileTable dispone di vincoli definiti dal sistema che assicurano che l'integrità dello spazio dei nomi di file e directory venga mantenuta. È necessario verificare questi vincoli per i dati caricati in bulk nella tabella FileTable. Poiché alcune operazioni di inserimento massivo consentono di ignorare i vincoli di tabella, si applicano i requisiti seguenti.

  • Le operazioni di caricamento bulk che impongono vincoli possono essere eseguite su una tabella FileTable esattamente come su qualsiasi altra tabella. Questa categoria include le operazioni seguenti:

    • bcp con la clausola CHECK_CONSTRAINTS.

    • BULK INSERT con clausola CHECK_CONSTRAINTS.

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

  • Le operazioni di caricamento bulk che non applicano vincoli hanno esito negativo a meno che i vincoli definiti dal sistema FileTable non siano stati disabilitati. Questa categoria include le operazioni seguenti:

    • bcp senza clausola CHECK_CONSTRAINTS.

    • BULK INSERT senza la clausola CHECK_CONSTRAINTS.

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

Procedura: Eseguire il caricamento massivo di file in una tabella FileTable

È possibile utilizzare diversi metodi per eseguire il caricamento bulk di file in una tabella FileTable:

  • Bcp

    • Effettuare una chiamata con la clausola CHECK_CONSTRAINTS.

    • Disattivare lo spazio dei nomi FileTable e effettuare la chiamata senza la clausola CHECK_CONSTRAINTS. Riabilitare nuovamente quindi lo spazio dei nomi FileTable.

  • BULK INSERT

    • Chiamata con la clausola CHECK_CONSTRAINTS

    • Disabilitare lo spazio dei nomi FileTable e effettuare chiamate senza la clausola CHECK_CONSTRAINTS. Riabilitare nuovamente quindi lo spazio dei nomi FileTable.

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

    • Chiamare con la clausola IGNORE_CONSTRAINTS .

    • Disabilitare il namespace di FileTable e effettuare la chiamata senza la clausola IGNORE_CONSTRAINTS. Riabilitare nuovamente quindi lo spazio dei nomi FileTable.

Per informazioni su come disabilitare i vincoli FileTable, vedere Gestire le tabelle FileTable.

Procedura: Disabilitare i vincoli di FileTable per il caricamento in massa

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. Per altre informazioni, vedere Gestire le tabelle FileTable.

Vedere anche

Accedere a tabelle FileTable tramite Transact-SQL
Accedere alle tabelle FileTable con API di input/output dei file