Caricare file in FileTable

Si applica a: SQL Server

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

Caricare o migrare i 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 risorse, opzioni della riga di comando, ad esempio xcopy e robocopy, nonché applicazioni o script personalizzati.

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

SQL Server include una tabella di metadati contenente puntatori ai file.
Il primo passaggio consiste nello spostare o copiare i file tramite 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 articolo.

Procedura: caricamento di file in una tabella FileTable

Per caricare i file in una tabella FileTable è possibile usare i metodi seguenti:

  • Trascinare e rilasciare file dalle cartelle di origine alla nuova cartella FileTable in Esplora risorse.

  • Usare opzioni della riga di comando quali move, copy, xcopy, or robocopy dal prompt dei comandi o in un file o script batch.

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

Esempio: migrazione di file dal file system in 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 ti consente di raggiungere tale obiettivo.

Per questo esempio, si supponga la disponibilità di una tabella di database esistente, denominata PhotoMetadata, che contiene dati su fotografie. Questa tabella include una colonna UNCPath di tipo varchar(512) contenente il percorso UNC effettivo di un file .jpg.

Per eseguire la migrazione dei file di immagine dal file system in una tabella FileTable, seguire questa procedura:

  1. Creare una nuova tabella FileTable che contenga i file. In questo esempio si usa il nome di tabella dbo.PhotoTable ma non viene illustrato il codice per creare la tabella.

  2. Utilizzare xcopy o uno strumento simile per copiare i file .jpg, con la relativa struttura di directory, nella directory radice della tabella FileTable.

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

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

Eseguire il caricamento bulk di file in una tabella FileTable

Una tabella FileTable si comporta come una normale tabella per operazioni bulk. Una tabella FileTable include vincoli definiti dal sistema che garantiscono l'integrità dello spazio dei nomi di file e directory. È necessario verificare questi vincoli per i dati caricati in bulk nella tabella FileTable. Poiché alcune operazioni di inserimento bulk 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 clausola CHECK_CONSTRAINTS.
    • BULK INSERT con clausola CHECK_CONSTRAINTS.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) senza clausola IGNORE_CONSTRAINTS.
  • Le operazioni di caricamento bulk che non applicano vincoli hanno esito negativo a meno i vincoli definiti dal sistema della tabella FileTable non siano disabilitati. Questa categoria include le operazioni seguenti:

    • bcp senza clausola CHECK_CONSTRAINTS.
    • BULK INSERT senza clausola CHECK_CONSTRAINTS.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) con clausola IGNORE_CONSTRAINTS.

Procedura: caricamento bulk di file in una tabella FileTable

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

Chiamare con la clausola CHECK_CONSTRAINTS.

Disabilitare lo spazio dei nomi FileTable ed eseguire una chiamata senza la clausola CHECK_CONSTRAINTS. Riabilitare quindi lo spazio dei nomi FileTable.

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

Procedura: disabilitare i vincoli FileTable per il caricamento bulk

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.