Condividi tramite


Utilizzare directory e percorsi in FileTable

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

Procedura: Utilizzare directory e percorsi in FileTable

È possibile usare le 3 funzioni seguenti per usare le directory 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)

Procedura: Utilizzare percorsi relativi per 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. Ottenere invece il percorso completo per un file in fase di esecuzione usando le 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  

Restrizioni importanti

Livello di nidificazione

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 I/O di file FILESTREAM a livello di 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 directory, 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 SQL Server e non è rappresentata fisicamente nel file system NTFS. Tutte le operazioni che accedono a file e directory nella condivisione FILESTREAM e nelle tabelle FileTable contenute vengono intercettate e gestite da un componente 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 questa condivisione usando Gestione configurazione SQL Server. L'operazione di ridenominazione non viene applicata 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_directoryvalore file_streamvalore 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.

Utilizzo di nomi di rete virtuale con i gruppi di disponibilità AlwaysOn

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

Vedere anche

Abilitare i prerequisiti per la tabella FileTable
Creare, modificare ed eliminare FileTable
Accedere a tabelle FileTable tramite Transact-SQL
Accedere alle tabelle FileTable con API di input/output dei file