Accedere a Dati FILESTREAM con Transact-SQLAccess FILESTREAM Data with Transact-SQL

In questo argomento si applica a: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse Questo argomento descrive come usare le istruzioni Transact-SQLTransact-SQL INSERT, UPDATE e DELETE per gestire dati FILESTREAM. This topic describes how to use the Transact-SQLTransact-SQL INSERT, UPDATE, and DELETE statements to manage FILESTREAM data.

Nota

Gli esempi riportati in questo argomento richiedono il database e la tabella abilitati per FILESTREAM creati in Creare un database abilitato per FILESTREAM e Creare una tabella per archiviare dati FILESTREAM.The examples in this topic require the FILESTREAM-enabled database and table that are created in Create a FILESTREAM-Enabled Database and Create a Table for Storing FILESTREAM Data.

Inserimento di una riga che contiene dati FILESTREAMInserting a Row That Contains FILESTREAM Data

Per aggiungere una riga a una tabella che supporta i dati FILESTREAM, utilizzare l'istruzione Transact-SQLTransact-SQL INSERT.To add a row to a table that supports FILESTREAM data, use the Transact-SQLTransact-SQL INSERT statement. Quando si inseriscono dati in una colonna FILESTREAM, è possibile inserire NULL o un valore varbinary(max) .When you insert data into a FILESTREAM column, you can insert NULL or a varbinary(max) value.

Inserimento di NULLInserting NULL

Nell'esempio seguente viene illustrato come inserire il valore NULL.The following example shows how to insert NULL. Se il valore FILESTREAM è NULL, il Motore di databaseDatabase Engine non crea alcun file nel file system.When the FILESTREAM value is NULL, the Motore di databaseDatabase Engine does not create a file in the file system.

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 1, NULL);
GO

Inserimento di un record di lunghezza zeroInserting a Zero-Length Record

Nell'esempio seguente viene illustrato l'utilizzo di INSERT per creare un record di lunghezza zero.The following example shows how to use INSERT to create a zero-length record. Questa istruzione risulta utile quando si desidera ottenere un handle di file, ma si modifica il file utilizzando API Win32.This is useful for when you want to obtain a file handle, but will be manipulating the file by using Win32 APIs.

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 2, 
      CAST ('' as varbinary(max)));
GO

Creazione di un file di datiCreating a Data File

Nell'esempio seguente viene illustrato l'utilizzo di INSERT per creare un file contenente dati.The following example shows how to use INSERT to create a file that contains data. Il Motore di databaseDatabase Engine converte la stringa Seismic Data in un valore varbinary(max) .The Motore di databaseDatabase Engine converts the string Seismic Data to a varbinary(max) value. Se non esiste già, FILESTREAM crea il file di Windows. I dati verranno quindi aggiunti al file di dati.FILESTREAM creates the Windows file if it does not already exist.The data is then added to the data file.

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 3, 
      CAST ('Seismic Data' as varbinary(max)));
GO

Se si selezionano tutti i dati della tabella Archive.dbo.Records, i risultati sono analoghi a quelli illustrati nella tabella seguente.When you select all data from the Archive.dbo.Records table, the results are similar to the results that are shown in the following table. La colonna Id conterrà tuttavia GUID diversi.However, the Id column will contain different GUIDs.

IDId SerialNumberSerialNumber GraficoChart
C871B90F-D25E-47B3-A560-7CC0CA405DAC 1 NULL
F8F5C314-0559-4927-8FA9-1535EE0BDF50 2 0x
7F680840-B7A4-45D4-8CD5-527C44D35B3F 3 0x536569736D69632044617461

Aggiornamento di dati FILESTREAMUpdating FILESTREAM Data

Per aggiornare i dati in file del file system, è possibile usare Transact-SQLTransact-SQL , sebbene sia preferibile evitare questa procedura quando si devono trasmettere elevate quantità di dati a un file.You can use Transact-SQLTransact-SQL to update the data in the file system file; although, you might not want to do this when you have to stream large amounts of data to a file.

Nel seguente esempio il testo nel record del file viene sostituito con il testo Xray 1.The following example replaces any text in the file record with the text Xray 1.

UPDATE Archive.dbo.Records
SET [Chart] = CAST('Xray 1' as varbinary(max))
WHERE [SerialNumber] = 2;

Eliminazione di dati FILESTREAMDeleting FILESTREAM Data

Quando si elimina una riga che contiene un campo FILESTREAM, vengono eliminati anche i file del file system sottostanti.When you delete a row that contains a FILESTREAM field, you also delete its underlying file system files. L'unico modo per eliminare una riga e pertanto il file è l'utilizzo dell'istruzione Transact-SQLTransact-SQL DELETE.The only way to delete a row, and therefore the file, is to use the Transact-SQLTransact-SQL DELETE statement.

Nell'esempio seguente viene descritta l'eliminazione di una riga e dei file del file system associati.The following example shows how to delete a row and its associated file system files.

DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO

Quando si selezionano tutti i dati della tabella Archive.dbo.Records, la riga viene rimossa e non è più possibile usare il file associato.When you select all data from the Archive.dbo.Records table, the row is gone and you can no longer use the associated file.

Nota

I file sottostanti vengono rimossi dal Garbage Collector di FILESTREAM.The underlying files are removed by the FILESTREAM garbage collector.

Vedere ancheSee Also

Abilitare e configurare FILESTREAM Enable and Configure FILESTREAM
Evitare conflitti con le operazioni del database nelle applicazioni di FILESTREAMAvoid Conflicts with Database Operations in FILESTREAM Applications