Usare elenchi e percorsi in FileTable

Si applica a:SQL Server

Descrive la struttura di directory nella quale vengono archiviati i file in FileTable.

Procedura: Utilizzare directory e percorsi in FileTable

Sono disponibili tre funzioni che consentono di usare gli elenchi FileTable in Transact-SQL:

Per ottenere questo risultato Utilizzare questa funzione
Ottenere il percorso UNC del livello radice di una specifica tabella FileTable o del database corrente. FileTableRootPath (Transact-SQL)
Ottenere un percorso UNC assoluto o relativo di un file o una directory in una tabella FileTable. GetFileNamespacePath (Transact-SQL)
Ottenere il valore dell'ID di posizione del percorso di una directory o di un file specificato in una tabella FileTable, indicandone il percorso. GetPathLocator (Transact-SQL)

Usare percorsi relativi per il codice portabile

Per mantenere il codice e le applicazioni indipendenti dal database e dal computer correnti, evitare di scrivere codice basato su percorsi di file assoluti. Ottieni invece il percorso completo di un file nel tempo di esecuzione mediante l'uso combinato delle funzioni FileTableRootPath (Transact-SQL) e GetFileNamespacePath (Transact-SQL), come illustrato nell'esempio seguente. Per impostazione predefinita, la funzione GetFileNamespacePath restituisce il percorso relativo del file all'interno del percorso radice per il database.

USE database_name;

DECLARE @root NVARCHAR(100);
DECLARE @fullpath NVARCHAR(1000);

SELECT @root = FileTableRootPath();

SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';

PRINT @fullpath;
GO

Limiti

Livello di annidamento

Importante

Non è possibile archiviare più di 15 livelli di sottodirectory nella directory FileTable. Quando si archiviano 15 livelli di sottodirectory, il livello più basso non può contenere file, poiché essi rappresenterebbero un ulteriore livello.

Lunghezza del nome e percorso completo

Importante

Il file system NTFS supporta nomi di percorso la cui lunghezza supera il limite di 260 caratteri della shell di Windows e della maggior parte delle API Windows. Pertanto, utilizzando Transact-SQL, è possibile creare file nella gerarchia dei file di una tabella FileTable che non è possibile visualizzare o aprire con Esplora risorse o con molte altre applicazioni Windows, perché il nome e percorso completo superano i 260 caratteri. Tuttavia, è possibile continuare ad accedere a questi file tramite Transact-SQL.

Percorso completo di un elemento archiviato in una tabella FileTable

Il percorso completo di un file o di una directory in una tabella FileTable inizia con gli elementi seguenti:

  1. Condivisione abilitata per l'accesso di I/O ai file FILESTREAM a livello dell'istanza di SQL Server.

  2. DIRECTORY_NAME specificato a livello di database.

  3. FILETABLE_DIRECTORY specificato a livello di FileTable.

La gerarchia risultante risulta analoga alla seguente:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Questa gerarchia di directory costituisce la radice di uno spazio dei nomi dei file di FileTable. In questa gerarchia di elenco, i dati FILESTREAM per la tabella FileTable vengono archiviati come file e come sottodirectory che possono a loro volta contenere file e sottodirectory.

È importante ricordare che la gerarchia di directory creata nella condivisione FILESTREAM a livello di istanza è una gerarchia di directory virtuale. Questa gerarchia viene archiviata nel database di SQL Server e non è rappresentata fisicamente nel file system NTFS. Tutte le operazioni che comportano l'accesso a file ed elenchi nella condivisione FILESTREAM e nelle tabelle FileTable in essa contenute sono intercettate e gestite da un componente di SQL Server incorporato nel file system.

Semantica delle directory radice a livello di istanza, database e tabella FileTable

Questa gerarchia di directory osserva la semantica seguente:

  • La condivisione FILESTREAM del livello di istanza viene configurata da un amministratore e archiviata come proprietà del server. È possibile rinominare la condivisione mediante Gestione configurazione SQL Server. L'operazione di ridenominazione non ha effetto finché il server non viene riavviato.

  • Per impostazione predefinita, l'elemento DIRECTORY_NAME a livello di database è null quando si crea un nuovo database. Un amministratore può impostare o modificare il nome mediante l'istruzione ALTER DATABASE. Il nome deve essere univoco (in un confronto senza distinzione fra maiuscole e minuscole) nell'istanza in questione.

  • In genere, il nome FILETABLE_DIRECTORY viene specificato con l'istruzione CREATE TABLE al momento di creare una tabella FileTable. È possibile modificare questo nome mediante il comando ALTER TABLE.

  • Non è possibile rinominare queste directory radice tramite operazioni di I/O su file.

  • Non è possibile aprire queste directory radice con handle di file esclusivi.

Colonna is_directory nello schema della tabella FileTable

La tabella seguente descrive l'interazione tra la colonna is_directory e la colonna file_stream contenente i dati FILESTREAM in una tabella FileTable.

is_directory value file_stream value Comportamento
FALSE NULL Si tratta di una combinazione non valida che sarà intercettata da un vincolo definito dal sistema.
FALSE <value> L'elemento rappresenta un file.
TRUE NULL L'elemento rappresenta una directory.
TRUE <value> Si tratta di una combinazione non valida che sarà intercettata da un vincolo definito dal sistema.

Uso di nomi di rete virtuale con gruppi di disponibilità Always On

Quando il database che contiene dati FILESTREAM o FileTable appartiene a un gruppo di disponibilità: