Utilizzare directory e percorsi in FileTableWork with Directories and Paths in FileTables

Descrive la struttura di directory nella quale vengono archiviati i file in FileTable.Describes the directory structure in which the files are stored in FileTables.

Procedura: Utilizzare directory e percorsi in FileTable How To: Work with Directories and Paths in FileTables

Sono disponibili 3 funzioni che consentono di utilizzare le directory FileTable in Transact-SQLTransact-SQL:You can use the following 3 functions to work with FileTable directories in Transact-SQLTransact-SQL:

Per ottenere questo risultatoTo get this result Utilizzare questa funzioneUse this function
Ottenere il percorso UNC del livello radice di una specifica tabella FileTable o del database corrente.Get the root-level UNC path for a specific FileTable or for the current database. FileTableRootPath (Transact-SQL)FileTableRootPath (Transact-SQL)
Ottenere un percorso UNC assoluto o relativo di un file o una directory in una tabella FileTable.Get an absolute or relative UNC path for a file or directory in a FileTable. GetFileNamespacePath (Transact-SQL)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.Get the path locator ID value for the specified file or directory in a FileTable, by providing the path. GetPathLocator (Transact-SQL)GetPathLocator (Transact-SQL)

Procedura: Utilizzare percorsi relativi per codice portabile How to: Use Relative Paths for Portable Code

Per mantenere il codice e le applicazioni indipendenti dal database e dal computer correnti, evitare di scrivere codice basato su percorsi di file assoluti.To keep code and applications independent of the current computer and database, avoid writing code that relies on absolute file paths. Ottenere invece il percorso completo di un file al runtime mediante l'uso combinato delle funzioni FileTableRootPath (Transact-SQL) e GetFileNamespacePath (Transact-SQL), come illustrato nell'esempio seguente.Instead, get the complete path for a file at run time by using the FileTableRootPath (Transact-SQL) and GetFileNamespacePath (Transact-SQL)) functions together, as shown in the following example. Per impostazione predefinita, la funzione GetFileNamespacePath restituisce il percorso relativo del file all'interno del percorso radice per il database.By default, the GetFileNamespacePath function returns the relative path of the file under the root path for the 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 Important restrictions

Livello di nidificazione Nesting level

IMPORTANTEIMPORTANT!! Non è possibile archiviare più di 15 livelli di sottodirectory nella directory FileTable.You cannot store more than 15 levels of subdirectories in the FileTable directory. Quando si archiviano 15 livelli di sottodirectory, il livello più basso non può contenere file, poiché essi rappresenterebbero un ulteriore livello.When you store 15 levels of subdirectories, then the lowest level cannot contain files, since these files would represent an additional level.

Lunghezza del nome e percorso completo Length of full path name

IMPORTANTEIMPORTANT!! 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.The NTFS file system supports path names that are much longer than the 260-character limit of the Windows shell and most Windows APIs. 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.Therefore it is possible to create files in the file hierarchy of a FileTable by using Transact-SQL that you cannot view or open with Windows Explorer or many other Windows applications, because the full path name exceeds 260 characters. Tuttavia, è possibile continuare ad accedere a questi file tramite Transact-SQL.However you can continue to access these files by using Transact-SQL.

Percorso completo di un elemento archiviato in una tabella FileTable The full path to an item stored in a FileTable

Il percorso completo di un file o di una directory in una tabella FileTable inizia con gli elementi seguenti:The full path to a file or directory stored in a FileTable begins with the following elements:

  1. Condivisione abilitata per l'accesso di I/O ai file FILESTREAM a livello dell'istanza di SQL ServerSQL Server .The share enabled for FILESTREAM file I/O access at the SQL ServerSQL Server instance level.

  2. DIRECTORY_NAME specificato a livello di database.The DIRECTORY_NAME specified at the database level.

  3. FILETABLE_DIRECTORY specificato a livello di FileTable.The FILETABLE_DIRECTORY specified at the FileTable level.

    La gerarchia risultante risulta analoga alla seguente:The resulting hierarchy looks like this:

    \\<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.This directory hierarchy forms the root of the FileTable’s file namespace. 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.Under this directory hierarchy, the FILESTREAM data for the FileTable is stored as files, and as subdirectories which can also contain files and subdirectories.

    È importante ricordare che la gerarchia di directory creata nella condivisione FILESTREAM a livello di istanza è una gerarchia di directory virtuale.It is important to keep in mind that the directory hierarchy created under the instance-level FILESTREAM share is a virtual directory hierarchy. Questa gerarchia viene archiviata nel database di SQL ServerSQL Server e non è rappresentata fisicamente nel file system NTFS.This hierarchy is stored in the SQL ServerSQL Server database and is not represented physically in the NTFS file system. 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 ServerSQL Server incorporato nel file system.All operations that access files and directories under the FILESTREAM share and in the FileTables that it contains are intercepted and handled by a SQL ServerSQL Server component embedded in the file system.

Semantica delle directory radice a livello di istanza, database e tabella FileTable The semantics of the root directories at the instance, database, and FileTable levels

Questa gerarchia di directory osserva la semantica seguente:This directory hierarchy observes the following semantics:

  • La condivisione FILESTREAM del livello di istanza viene configurata da un amministratore e archiviata come proprietà del server.The instance-level FILESTREAM share is configured by an administrator and stored as a property of the server. È possibile rinominare la condivisione mediante Gestione configurazione di SQL ServerSQL Server .You can rename this share by using SQL ServerSQL Server Configuration Manager. L'operazione di ridenominazione non viene applicata finché il server non viene riavviato.A renaming operation does not take effect until the server is restarted.

  • Per impostazione predefinita, l'elemento DIRECTORY_NAME a livello di database è null quando si crea un nuovo database.The database-level DIRECTORY_NAME is null by default when you create a new database. Un amministratore può impostare o modificare il nome mediante l'istruzione ALTER DATABASE .An administrator can set or change this name by using the ALTER DATABASE statement. Il nome deve essere univoco (in un confronto senza distinzione fra maiuscole e minuscole) nell'istanza in questione.The name must be unique (in a case-insensitive comparison) in that instance.

  • In genere, il nome FILETABLE_DIRECTORY viene specificato con l'istruzione CREATE TABLE al momento di creare una tabella FileTable.You typically provide the FILETABLE_DIRECTORY name as part of the CREATE TABLE statement when you create a FileTable. È possibile modificare questo nome mediante il comando ALTER TABLE .You can change this name by using the ALTER TABLE command.

  • Non è possibile rinominare queste directory radice tramite operazioni di I/O su file.You cannot rename these root directories through file I/O operations.

  • Non è possibile aprire queste directory radice con handle di file esclusivi.You cannot open these root directories with exclusive file handles.

Colonna is_directory nello schema della tabella FileTable The is_directory column in the FileTable schema

La tabella seguente descrive l'interazione tra la colonna is_directory e la colonna file_stream contenente i dati FILESTREAM in una tabella FileTable.The following table describes the interaction between the is_directory column and the file_stream column that contains the FILESTREAM data in a FileTable.

is_directory valueis_directory value file_stream valuefile_stream value ComportamentoBehavior
FALSEFALSE NULLNULL Si tratta di una combinazione non valida che sarà intercettata da un vincolo definito dal sistema.This is an invalid combination that will be caught by a system-defined constraint.
FALSEFALSE <valore><value> L'elemento rappresenta un file.The item represents a file.
TRUETRUE NULLNULL L'elemento rappresenta una directory.The item represents a directory.
TRUETRUE <valore><value> Si tratta di una combinazione non valida che sarà intercettata da un vincolo definito dal sistema.This is an invalid combination that will be caught by a system-defined constraint.

Utilizzo di nomi di rete virtuale con i gruppi di disponibilità AlwaysOn Using Virtual Network Names (VNNs) with AlwaysOn Availability Groups

Quando il database che contiene dati FILESTREAM o FileTable appartiene a un gruppo di disponibilità AlwaysOn:When the database that contains FILESTREAM or FileTable data belongs to an AlwaysOn availability group:

Vedere ancheSee Also

Abilitazione dei prerequisiti per la tabella FileTable Enable the Prerequisites for FileTable
Creare, modificare e rilasciare FileTables Create, Alter, and Drop FileTables
Accesso a tabelle FileTable tramite Transact-SQL Access FileTables with Transact-SQL
Accedere alle tabelle FileTable con API di Input-Output dei file Access FileTables with File Input-Output APIs