FILESTREAM (SQL Server)FILESTREAM (SQL Server)

FILESTREAM consente l'archiviazione nel file system di dati non strutturati, ad esempio documenti e immagini, da parte delle applicazioni basate su SQL ServerSQL Server.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. Le applicazioni possono sfruttare le numerose API di flusso e le prestazioni del file system e contemporaneamente mantenere la coerenza transazionale tra i dati non strutturati e i corrispondenti dati strutturati.Applications can leverage the rich streaming APIs and performance of the file system and at the same time maintain transactional consistency between the unstructured data and corresponding structured data.

FILESTREAM integra il Motore di database di SQL ServerSQL Server Database Engine con un file system NTFS o ReFS archiviando dati BLOB (Binary Large Object) binari varbinary(max) come file nel file system.FILESTREAM integrates the Motore di database di SQL ServerSQL Server Database Engine with an NTFS or ReFS file systems by storing varbinary(max) binary large object (BLOB) data as files on the file system. Transact-SQLTransact-SQL offre istruzioni che consentono di inserire, aggiornare ed eseguire query, ricerche e back up dei dati FILESTREAM. statements can insert, update, query, search, and back up FILESTREAM data. Le interfacce del file system Win32 forniscono accesso ai dati tramite flusso.Win32 file system interfaces provide streaming access to the data.

FILESTREAM utilizza la cache di sistema NT per memorizzare nella cache i dati del file.FILESTREAM uses the NT system cache for caching file data. Ciò consente di ridurre qualsiasi effetto che i dati FILESTREAM potrebbero avere sulle prestazioni del Motore di databaseDatabase Engine .This helps reduce any effect that FILESTREAM data might have on Motore di databaseDatabase Engine performance. Il pool di buffer SQL ServerSQL Server non è utilizzato; pertanto questa memoria è disponibile per l'elaborazione di query.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

Poiché FILESTREAM non viene abilitato automaticamente al momento dell'installazione o dell'aggiornamento di SQL ServerSQL Server,FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. è necessario abilitarlo usando Gestione configurazione SQL Server e SQL Server Management StudioSQL Server Management Studio.You must enable FILESTREAM by using SQL Server Configuration Manager and SQL Server Management StudioSQL Server Management Studio. Per utilizzare FILESTREAM, è necessario creare o modificare un database in modo che contenga un tipo speciale di filegroupTo use FILESTREAM, you must create or modify a database to contain a special type of filegroup. e quindi creare o modificare una tabella in modo che contenga una colonna varbinary(max) con l'attributo FILESTREAM.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. Dopo avere completato queste attività, è possibile usare Transact-SQLTransact-SQL e Win32 per gestire i dati FILESTREAM.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

Quando utilizzare FILESTREAMWhen to Use FILESTREAM

In SQL ServerSQL Server, i BLOB possono essere dati standard varbinary(max) che archiviano i dati nelle tabelle oppure oggetti varbinary(max) di FILESTREAM che archiviano i dati nel file system.In SQL ServerSQL Server, BLOBs can be standard varbinary(max) data that stores the data in tables, or FILESTREAM varbinary(max) objects that store the data in the file system. La dimensione e l'utilizzo dei dati determinano se è necessario utilizzare l'archiviazione nel database o l'archiviazione nel file system.The size and use of the data determines whether you should use database storage or file system storage. Se le condizioni indicate di seguito vengono soddisfatte, è necessario utilizzare FILESTREAM:If the following conditions are true, you should consider using FILESTREAM:

  • Gli oggetti che si stanno archiviando sono, in media, più grandi di 1 MB.Objects that are being stored are, on average, larger than 1 MB.

  • La rapidità dell'accesso in lettura è importante.Fast read access is important.

  • Si stanno sviluppando applicazioni che utilizzano un livello intermedio per la logica dell'applicazione.You are developing applications that use a middle tier for application logic.

    Per oggetti più piccoli, l'archiviazione di BLOB varbinary(max) nel database offre spesso migliori prestazioni di flusso.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

Archiviazione FILESTREAMFILESTREAM Storage

L'archiviazione FILESTREAM viene implementata come una colonna varbinary(max) nella quale i dati sono archiviati come BLOB nel file system.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. Le dimensioni dei BLOB sono limitate solo dalle dimensioni del volume del file system.The sizes of the BLOBs are limited only by the volume size of the file system. Il limite varbinary(max) standard di 2 GB delle dimensioni del file non si applica ai BLOB archiviati nel file system.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

Per indicare che una colonna deve archiviare dati nel file system, specificare l'attributo FILESTREAM in una colonna varbinary(max) .To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. In questo modo Motore di databaseDatabase Engine archivia tutti i dati per quella colonna nel file system, ma non nel file di database.This causes the Motore di databaseDatabase Engine to store all data for that column on the file system, but not in the database file.

I dati FILESTREAM devono essere archiviati nei filegroup FILESTREAM.FILESTREAM data must be stored in FILESTREAM filegroups. Un filegroup FILESTREAM è un filegroup speciale che contiene directory del file system anziché dei file stessi.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. Queste directory del file system vengono chiamate contenitori di dati.These file system directories are called data containers. I contenitori di dati rappresentano l'interfaccia tra archiviazione nel Motore di databaseDatabase Engine e archiviazione nel file system.Data containers are the interface between Motore di databaseDatabase Engine storage and file system storage.

Se si utilizza l'archiviazione FILESTREAM, considerare gli aspetti indicati di seguito:When you use FILESTREAM storage, consider the following:

  • Se una tabella contiene una colonna FILESTREAM, ogni riga deve avere un ID riga univoco con valore diverso da Null.When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.

  • È possibile aggiungere più contenitori di dati a un filegroup FILESTREAM.Multiple data containers can be added to a FILESTREAM filegroup.

  • I contenitori di dati FILESTREAM non possono essere nidificati.FILESTREAM data containers cannot be nested.

  • Se si utilizza il clustering di failover, i filegroup FILESTREAM devono trovarsi su risorse disco condivise.When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.

  • I filegroup FILESTREAM possono essere su volumi compressi.FILESTREAM filegroups can be on compressed volumes.

Gestione integrataIntegrated Management

Poiché FILESTREAM viene implementato come colonna varbinary(max) e integrato direttamente nel Motore di databaseDatabase Engine, la maggior parte degli strumenti e delle funzioni di gestione di SQL ServerSQL Server funziona senza alcuna modifica dei dati FILESTREAM.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the Motore di databaseDatabase Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. Ad esempio, è possibile utilizzare tutti i modelli di backup e di recupero con i dati FILESTREAM e per questo viene eseguito il backup con i dati strutturati nel database.For example, you can use all backup and recovery models with FILESTREAM data, and the FILESTREAM data is backed up with the structured data in the database. Se non si desidera eseguire il backup dei dati FILESTREAM con i dati relazionali, è possibile utilizzare un backup parziale per escludere i filegroup FILESTREAM.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Sicurezza integrataIntegrated Security

In SQL ServerSQL Server, i dati FILESTREAM sono protetti così come avviene per gli altri dati, ossia tramite la concessione di autorizzazioni ai livelli di tabella o colonna.In SQL ServerSQL Server, FILESTREAM data is secured just like other data is secured: by granting permissions at the table or column levels. Se un utente dispone delle autorizzazioni per la colonna FILESTREAM in una tabella, può aprire i file associati.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

Nota

La crittografia non è supportata sui dati FILESTREAM.Encryption is not supported on FILESTREAM data.

Solo all'account con il quale viene eseguito l'account del servizio SQL ServerSQL Server sono concesse autorizzazioni al contenitore FILESTREAM.Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. È consigliabile non concedere altre autorizzazioni per il contenitore di dati ad altri account.We recommend that no other account be granted permissions on the data container.

Nota

Gli account di accesso SQL non funzioneranno con contenitori FILESTREAM.SQL logins will not work with FILESTREAM containers. Solo l'autenticazione NTFS o ReFS funziona con contenitori FILESTREAM.Only NTFS or ReFS authentication will work with FILESTREAM containers.

Accesso a dati BLOB con Transact-SQL e accesso tramite flusso al file system Accessing BLOB Data with Transact-SQL and File System Streaming Access

Dopo avere archiviato dati in una colonna FILESTREAM, è possibile accedere ai file usando le transazioni Transact-SQLTransact-SQL oppure le API Win32.After you store data in a FILESTREAM column, you can access the files by using Transact-SQLTransact-SQL transactions or by using Win32 APIs.

Accesso Transact-SQLTransact-SQL Access

Utilizzando Transact-SQLTransact-SQL, è possibile inserire, aggiornare ed eliminare i dati FILESTREAM:By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • È possibile utilizzare un'operazione di inserimento per il popolamento preliminare di un campo FILESTREAM con un valore null, un valore vuoto, o dati inline relativamente brevi.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. Tuttavia, una grande quantità di dati viene trasmessa in modo più efficace in un file che utilizza interfacce Win32.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.

  • Quando si aggiorna un campo FILESTREAM, si modificano i dati BLOB sottostanti nel file system.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. Quando un campo FILESTREAM viene impostato su NULL, i dati BLOB associati al campo vengono eliminati.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. Non è possibile usare un aggiornamento Chunked di Transact-SQLTransact-SQL , implementato come UPDATE.Write() per eseguire aggiornamenti parziali dei dati.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE.Write(), to perform partial updates to the data.

  • Quando si elimina una riga oppure si elimina o si tronca una tabella che contiene i dati FILESTREAM, si eliminano i dati BLOB sottostanti nel file system.When you delete a row or delete or truncate a table that contains FILESTREAM data, you delete the underlying BLOB data in the file system.

Accesso di flusso al file systemFile System Streaming Access

Il supporto di flusso di Win32 funziona nel contesto di una transazione SQL ServerSQL Server .The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. All'interno di una transazione, è possibile utilizzare funzioni FILESTREAM per ottenere un percorso di file system UNC logico di un file.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. Si usa quindi l'API OpenSqlFilestream per ottenere un handle di file.You then use the OpenSqlFilestream API to obtain a file handle. Questo handle può essere usato quindi dalle interfacce di flusso dei file Win32, ad esempio ReadFile() e WriteFile(), per accedere e aggiornare il file con il file system.This handle can then be used by Win32 file streaming interfaces, such as ReadFile() and WriteFile(), to access and update the file by way of the file system.

Dato che le operazioni con i file sono transazionali, non è possibile eliminare o rinominare i file FILESTREAM tramite il file system.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

Modello istruzioneStatement Model

L'accesso al file system di FILESTREAM consente di modellare un'istruzione Transact-SQLTransact-SQL utilizzando le operazioni di apertura e chiusura dei file.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. L'istruzione si avvia quando un handle di file è aperto e termina quando l'handle è chiuso.The statement starts when a file handle is opened and ends when the handle is closed. Ad esempio, se un handle di scrittura è chiuso, qualsiasi possibile trigger AFTER registrato nella tabella si attiva come se un'istruzione UPDATE fosse completata.For example, when a write handle is closed, any possible AFTER trigger that is registered on the table fires as if an UPDATE statement is completed.

Spazio dei nomi dell'archiviazioneStorage Namespace

In FILESTREAM, Motore di databaseDatabase Engine consente di controllare lo spazio dei nomi del file system fisico di BLOB.In FILESTREAM, the Motore di databaseDatabase Engine controls the BLOB physical file system namespace. Una nuova funzione intrinseca PathNamefornisce il percorso UNC logico di BLOB che corrisponde a ogni cella di FILESTREAM nella tabella.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. L'applicazione usa questo percorso logico per ottenere l'handle Win32 e operare sui dati BLOB con le normali interfacce del file system Win32.The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. La funzione restituisce NULL se il valore della colonna FILESTREAM è NULL.The function returns NULL if the value of the FILESTREAM column is NULL.

Accesso al file system transazionaleTransacted File System Access

Una nuova funzione intrinseca GET_FILESTREAM_TRANSACTION_CONTEXT()fornisce il token che rappresenta la transazione corrente alla quale è associata la sessione.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. È necessario che la transazione sia stata avviata e non sia stata ancora interrotta o non ne sia stato ancora eseguito il commit.The transaction must have been started and not yet aborted or committed. Ottenendo un token, l'applicazione associa le operazioni di flusso del file system di FILESTREAM con una transazione avviata.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. La funzione restituisce NULL se non esistono transazioni esplicitamente avviate.The function returns NULL in case of no explicitly started transaction.

Tutti gli handle di file devono essere chiusi prima che la transazione venga interrotta o ne venga eseguito il commit.All file handles must be closed before the transaction commits or aborts. Se un handle viene lasciato aperto oltre l'ambito della transazione, le letture aggiuntive sull'handle causeranno un errore, mentre le scritture aggiuntive sull'handle riusciranno, ma in realtà i dati non saranno scritti su disco.If a handle is left open beyond the transaction scope, additional reads against the handle will cause a failure; additional writes against the handle will succeed, but the actual data will not be written to disk. Allo stesso modo, se il database o l'istanza del Motore di databaseDatabase Engine si chiude, tutti gli handle aperti non sono più validi.Similarly, if the database or instance of the Motore di databaseDatabase Engine shuts down, all open handles are invalidated.

Durabilità delle transazioniTransactional Durability

Con FILESTREAM, su commit della transazione, viene assicurata nel Motore di databaseDatabase Engine la durevolezza delle transazioni per i dati BLOB di FILESTREAM modificati dall'accesso di flusso al file system.With FILESTREAM, upon transaction commit, the Motore di databaseDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

Semantica dell'isolamentoIsolation Semantics

La semantica dell'isolamento è gestita dai livelli di isolamento delle transazioni del Motore di databaseDatabase Engine .The isolation semantics are governed by Motore di databaseDatabase Engine transaction isolation levels. Il livello di isolamento Read Committed è supportato per Transact-SQLTransact-SQL e per l'accesso al file system.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. Sono supportati le operazioni di lettura ripetibili e gli isolamenti serializzabili e degli snapshot.Repeatable read operations, and also serializable and snapshot isolations, are supported. La lettura dirty non è supportata.Dirty read is not supported.

Le operazioni di apertura dell'accesso al file system non attendono alcun blocco,The file system access open operations do not wait for any locks. ma non riescono immediatamente se non possono accedere ai dati a causa dell'isolamento della transazione.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. Le chiamate API di flusso non riescono con ERROR_SHARING_VIOLATION se l'operazione di apertura non può continuare a causa della violazione dell'isolamento.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

Per consentire l'esecuzione di aggiornamenti parziali, l'applicazione può eseguire un controllo FS del dispositivo (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) per recuperare il contenuto obsoleto nel file a cui fa riferimento l'handle aperto.To allow for partial updates to be made, the application can issue a device FS control (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) to fetch the old content into the file that the opened handle references. In questo modo verrà attivata una copia del contenuto obsoleto sul lato server.This will trigger a server-side old content copy. Per ottenere migliori prestazioni dell'applicazione ed evitare di causare timeout potenziali quando si utilizzano file molto grandi, si consiglia di utilizzare I/O asincroni.For better application performance and to avoid running into potential time-outs when you are working with very large files, we recommend that you use asynchronous I/O.

Se FSCTL viene eseguito dopo la scrittura sull'handle, l'ultima operazione di scrittura verrà resa persistente e le scritture precedenti eseguite sull'handle andranno perdute.If the FSCTL is issued after the handle has been written to, the last write operation will persist, and prior writes that were made to the handle are lost.

API del file system e livelli di isolamento supportatiFile System APIs and Supported Isolation Levels

Quando una API del file system non può aprire un file a causa di una violazione dell'isolamento, viene restituita un'eccezione ERROR_SHARING_VIOLATION.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. Si verifica questa violazione dell'isolamento quando due transazioni tentano di accedere allo stesso file.This isolation violation occurs when two transactions try to access the same file. Il risultato dell'operazione di accesso dipende dalla modalità in cui è stato aperto il file e dalla versione di SQL ServerSQL Server in cui viene eseguita la transazione.The outcome of the access operation depends on the mode the file was opened in and the version of SQL ServerSQL Server that the transaction is running on. Nella tabella seguente vengono illustrati i possibili risultati se due transazioni accedono allo stesso file.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

Transazione 1Transaction 1 Transazione 2Transaction 2 Risultato in SQL Server 2008Outcome on SQL Server 2008 Risultato in SQL Server 2008 R2 e versioni successiveOutcome on SQL Server 2008 R2 and later versions
Aperta per la lettura.Open for read. Aperta per la lettura.Open for read. Riescono entrambe.Both succeed. Riescono entrambe.Both succeed.
Aperta per la lettura.Open for read. Aperta per la scrittura.Open for write. Riescono entrambe.Both succeed. Le operazioni di scrittura nella transazione 2 non influiscono sulle operazioni di lettura eseguite nella transazione 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Riescono entrambe.Both succeed. Le operazioni di scrittura nella transazione 2 non influiscono sulle operazioni di lettura eseguite nella transazione 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Aperta per la scrittura.Open for write. Aperta per la lettura.Open for read. L'apertura per la transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Riescono entrambe.Both succeed.
Aperta per la scrittura.Open for write. Aperta per la scrittura.Open for write. L'apertura per la transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. L'apertura per la transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Aperta per la lettura.Open for read. Aperta per SELECT.Open for SELECT. Riescono entrambe.Both succeed. Riescono entrambe.Both succeed.
Aperta per la lettura.Open for read. Aperta per UPDATE o DELETE.Open for UPDATE or DELETE. Riescono entrambe.Both succeed. Le operazioni di scrittura nella transazione 2 non influiscono sulle operazioni di lettura eseguite nella transazione 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Riescono entrambe.Both succeed. Le operazioni di scrittura nella transazione 2 non influiscono sulle operazioni di lettura eseguite nella transazione 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Aperta per la scrittura.Open for write. Aperta per SELECT.open for SELECT. La transazione 2 viene bloccata fino al commit o alla fine della transazione 1 o fino a quando non si verifica il timeout del blocco della transazione.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Riescono entrambe.Both succeed.
Aperta per la scrittura.Open for write. Aperta per UPDATE o DELETE.Open for UPDATE or DELETE. La transazione 2 viene bloccata fino al commit o alla fine della transazione 1 o fino a quando non si verifica il timeout del blocco della transazione.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. La transazione 2 viene bloccata fino al commit o alla fine della transazione 1 o fino a quando non si verifica il timeout del blocco della transazione.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
Aperta per SELECT.Open for SELECT. Aperta per la lettura.Open for read. Riescono entrambe.Both succeed. Riescono entrambe.Both succeed.
Aperta per SELECT.Open for SELECT. Aperta per la scrittura.Open for write. Riescono entrambe.Both succeed. Le operazioni di scrittura nella transazione 2 non interessano la transazione 1.Write operations under transaction 2 do not affect transaction 1. Riescono entrambe.Both succeed. Le operazioni di scrittura nella transazione 2 non interessano la transazione 1.Write operations under transaction 2 do not affect transaction 1.
Aperta per UPDATE o DELETE.Open for UPDATE or DELETE. Aperta per la lettura.Open for read. L'operazione di apertura nella transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Riescono entrambe.Both succeed.
Aperta per UPDATE o DELETE.Open for UPDATE or DELETE. Aperta per la scrittura.Open for write. L'operazione di apertura nella transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. L'operazione di apertura nella transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Aperta per SELECT con lettura ripetibile.Open for SELECT with repeatable read. Aperta per la lettura.Open for read. Riescono entrambe.Both succeed. Riescono entrambe.Both succeed.
Aperta per SELECT con lettura ripetibile.Open for SELECT with repeatable read. Aperta per la scrittura.Open for write. L'operazione di apertura nella transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. L'operazione di apertura nella transazione 2 non riesce con eccezione ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

Write-through da client remotiWrite-Through from Remote Clients

L'accesso remoto al file system per i dati FILESTREAM è abilitato tramite il protocollo SMB (Server Message Block).Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. Se il client è remoto, nella cache non vengono memorizzate operazioni di scrittura lato client.If the client is remote, no write operations are cached by the client side. Le operazioni di scrittura saranno inviate sempre al server.The write operations will always be sent to the server. I dati possono essere memorizzati nella cache sul lato server.The data can be cached on the server side. Si consiglia di far consolidare alle applicazioni eseguite sui client remoti piccole operazioni di scrittura per effettuarne un numero minore con dati di dimensioni superiori.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

La creazione di viste con mapping alla memoria (I/O con mapping alla memoria) utilizzando handle FILESTREAM non è supportata.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. Se il mapping di memoria viene usato per i dati FILESTREAM, il Motore di databaseDatabase Engine non può garantire coerenza e durabilità dei dati o l'integrità del database.If memory mapping is used for FILESTREAM data, the Motore di databaseDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

Abilitare e configurare FILESTREAMEnable and Configure FILESTREAM
Creazione di un database abilitato per FILESTREAM Create a FILESTREAM-Enabled Database
Creazione di una tabella per archiviare dati FILESTREAM Create a Table for Storing FILESTREAM Data
Accedere a Dati FILESTREAM con Transact-SQL Access FILESTREAM Data with Transact-SQL
Creazione di applicazioni client per dati FILESTREAM Create Client Applications for FILESTREAM Data
Accesso ai dati FILESTREAM con OpenSqlFilestream Access FILESTREAM Data with OpenSqlFilestream
Esecuzione di aggiornamenti parziali di dati FILESTREAM Make Partial Updates to FILESTREAM Data
Evitare conflitti con le operazioni del database nelle applicazioni di FILESTREAM Avoid Conflicts with Database Operations in FILESTREAM Applications
Spostamento di un database abilitato per FILESTREAM Move a FILESTREAM-Enabled Database
Configurazione di FILESTREAM in un cluster di failover Set Up FILESTREAM on a Failover Cluster
Configurare un firewall per l'accesso FILESTREAM Configure a Firewall for FILESTREAM Access

Compatibilità FILESTREAM con altre funzionalità di SQL ServerFILESTREAM Compatibility with Other SQL Server Features