Acessar dados FILESTREAM com Transact-SQLAccess FILESTREAM Data with Transact-SQL

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Este tópico descreve como usar as instruções INSERT, UPDATE e DELETE do Transact-SQLTransact-SQL para gerenciar dados FILESTREAM.This topic describes how to use the Transact-SQLTransact-SQL INSERT, UPDATE, and DELETE statements to manage FILESTREAM data.

Observação

Os exemplos citados neste tópico exigem o banco de dados e a tabela habilitados para FILESTREAM criados em Criar um banco de dados habilitado para FILESTREAM e Criar uma tabela para armazenar dados de 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.

Inserindo uma linha contendo dados de FILESTREAMInserting a Row That Contains FILESTREAM Data

Para adicionar uma linha a uma tabela que suporte dados de FILESTREAM, use a instrução INSERT de Transact-SQLTransact-SQL .To add a row to a table that supports FILESTREAM data, use the Transact-SQLTransact-SQL INSERT statement. Ao inserir dados em uma coluna FILESTREAM, é possível inserir NULL ou um valor varbinary(max) .When you insert data into a FILESTREAM column, you can insert NULL or a varbinary(max) value.

Inserindo NULLInserting NULL

O exemplo a seguir mostra como inserir NULL.The following example shows how to insert NULL. Quando o valor de FILESTREAM for NULL, o Mecanismo de Banco de DadosDatabase Engine não criará um arquivo no sistema de arquivos.When the FILESTREAM value is NULL, the Mecanismo de Banco de DadosDatabase Engine does not create a file in the file system.

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

Inserindo um registro de comprimento zeroInserting a Zero-Length Record

O exemplo a seguir mostra como usar INSERT para criar um registro com comprimento zero,The following example shows how to use INSERT to create a zero-length record. o que é útil quando você quer obter um identificador de arquivo, mas manipulará o arquivo usando APIs de 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

Criando um arquivo de dadosCreating a Data File

O exemplo a seguir mostra como usar o objeto INSERT para criar um arquivo que contenha dados.The following example shows how to use INSERT to create a file that contains data. O Mecanismo de Banco de DadosDatabase Engine converte a cadeia de caracteres Seismic Data para um valor varbinary(max) .The Mecanismo de Banco de DadosDatabase Engine converts the string Seismic Data to a varbinary(max) value. O FILESTREAM criará o arquivo Windows se ele ainda não existir. Depois, os dados serão adicionados ao arquivo de dados.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

Quando você selecionar todos os dados da tabela Archive.dbo.Records, os resultados serão similares aos mostrados na tabela a seguir.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. Porém, a coluna Id conterá GUIDs diferente.However, the Id column will contain different GUIDs.

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

Atualizando dados de FILESTREAMUpdating FILESTREAM Data

Você pode usar o Transact-SQLTransact-SQL para atualizar os dados no arquivo do sistema de arquivos; não é recomendável fazer isso quando houver grandes quantidades de fluxo de dados em um arquivo.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.

O exemplo a seguir substitui qualquer texto no registro do arquivo pelo texto 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;

Excluindo dados de FILESTREAMDeleting FILESTREAM Data

Ao excluir uma linha que contém um campo de FILESTREAM, você também exclui seus arquivos subjacentes do sistema de arquivos.When you delete a row that contains a FILESTREAM field, you also delete its underlying file system files. O único modo de excluir uma linha, e portanto o arquivo, é usar a instrução DELETE do Transact-SQLTransact-SQL .The only way to delete a row, and therefore the file, is to use the Transact-SQLTransact-SQL DELETE statement.

O exemplo a seguir mostra como excluir uma linha e seus arquivos associados do sistema de arquivos.The following example shows how to delete a row and its associated file system files.

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

Quando você seleciona todos os dados da tabela Archive.dbo.Records, a linha é excluída e o arquivo associado não pode mais ser usado.When you select all data from the Archive.dbo.Records table, the row is gone and you can no longer use the associated file.

Observação

Os arquivos subjacentes são removidos pelo coletor de lixo do FILESTREAM.The underlying files are removed by the FILESTREAM garbage collector.

Consulte TambémSee Also

Habilitar e configurar FILESTREAM Enable and Configure FILESTREAM
Evitar conflitos com operações de banco de dados em aplicativos de FILESTREAMAvoid Conflicts with Database Operations in FILESTREAM Applications