Administrar datos FILESTREAM usando Transact-SQL

En este tema se describe cómo utilizar las instrucciones INSERT, DELETE y UPDATE de Transact-SQL para administrar los datos de FILESTREAM.

Nota

Los ejemplos de este tema requieren la tabla y la base de datos habilitada para FILESTREAM que se crean en Cómo crear una base de datos habilitada para FILESTREAM y Cómo crear una tabla para almacenar datos FILESTREAM.

Insertar una fila que contiene datos FILESTREAM

Para agregar una fila a una tabla que admite datos FILESTREAM, utilice la instrucción de Transact-SQL INSERT. Al insertar datos en una columna FILESTREAM, se puede insertar NULL o un valor varbinary(max).

Insertar NULL

El ejemplo siguiente muestra la forma de utilizar el valor NULL. Cuando el valor FILESTREAM es NULL, Motor de base de datos no crea un archivo en el sistema de archivos.

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

Insertar un registro de longitud cero

En el siguiente ejemplo se muestra cómo utilizar INSERT para crear un registro de longitud cero. Esto es útil cuando se desea obtener un identificador de archivo, pero el archivo se va a tratar con las API de Win32.

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

Crear un archivo de datos

En el siguiente ejemplo se muestra cómo utilizar INSERT para crear un archivo que contiene datos. Motor de base de datos convierte la cadena Seismic Data en un valor varbinary(max). FILESTREAM crea el archivo de Windows si aún no existe. A continuación, los datos se agregan al archivo de datos.

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

Cuando selecciona todos los datos de la tabla Archive.dbo.Records, los resultados son similares a los que se muestran en la tabla siguiente. Sin embargo, la columna Id contendrá GUID diferentes.

Id.

SerialNumber

Resume

C871B90F-D25E-47B3-A560-7CC0CA405DAC

1

NULL

F8F5C314-0559-4927-8FA9-1535EE0BDF50

2

0x

7F680840-B7A4-45D4-8CD5-527C44D35B3F

3

0x536569736D69632044617461

Actualizar datos FILESTREAM

Puede usar Transact-SQL para actualizar los datos del archivo del sistema de archivos; sin embargo, puede no ser conveniente si hay que transmitir por secuencias grandes cantidades de datos a un archivo.

En el ejemplo siguiente se reemplaza cualquier texto del registro del archivo por el texto Xray 1.

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

Eliminar datos FILESTREAM

Al eliminar una fila que contiene un campo FILESTREAM, también elimina sus archivos de sistema de archivos subyacentes. La única manera de eliminar una fila y por consiguiente el archivo, es utilizar la instrucción Transact-SQL DELETE.

El ejemplo siguiente muestra cómo eliminar una fila y sus archivos de sistema de archivo asociados.

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

Al seleccionar todos los datos de la tabla dbo.Archive, la fila ya no está. Ya no puede utilizar el archivo asociado.

Nota

El recolector de elementos no utilizados de FILESTREAM quita los archivos subyacentes.