Share via


Utilizzare directory e percorsi in FileTable

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

Contenuto dell'argomento

Per

  • Utilizzare directory e percorsi in FileTable

  • Utilizzare percorsi relativi per codice portabile

Ulteriori informazioni

  • Restrizioni importanti

    • Livello di nidificazione

    • Lunghezza del nome e percorso completo

  • Percorso completo di un elemento archiviato in una tabella FileTable

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

  • Colonna is_directory nello schema della tabella FileTable

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

Procedura: Utilizzare directory e percorsi in FileTable

Sono disponibili 3 funzioni che consentono di utilizzare 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)

[TORNA ALL'INIZIO]

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 di un file al runtime mediante l'utilizzo 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

[INIZIO PAGINA]

Restrizioni importanti

Livello di nidificazione

Nota importanteImportante

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

Nota importanteImportante

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 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 di SQL Server e non è rappresentata fisicamente nel file system NTFS. Tutte le operazioni che comportano l'accesso a file e directory nella condivisione FILESTREAM e nelle tabelle FileTable in essa contenute sono intercettate e gestite da un componente di SQL Server incorporato nel file system.

[TORNA ALL'INIZIO]

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

[TORNA ALL'INIZIO]

Colonna is_directory nello schema della tabella FileTable

Nella tabella seguente è descritta l'interazione tra la colonna is_directory e la colonna file_stream contenente i dati FILESTREAM in una tabella FileTable.

Valore di is_directory

Valore di file_stream

Comportamento

FALSE

NULL

Si tratta di una combinazione non valida che sarà intercettata da un vincolo definito dal sistema.

FALSE

<valore>

L'elemento rappresenta un file.

TRUE

NULL

L'elemento rappresenta una directory.

TRUE

<Valore>

Si tratta di una combinazione non valida che sarà intercettata da un vincolo definito dal sistema.

[INIZIO PAGINA]

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:

[INIZIO PAGINA]

Vedere anche

Concetti

Abilitazione dei prerequisiti per la tabella FileTable

Creare, modificare e rilasciare FileTables

Accesso a tabelle FileTable tramite Transact-SQL

Accedere alle tabelle FileTable con API di I\O dei file