Управление данными FILESTREAM с помощью языка Transact-SQL

В этом разделе описаны способы использования инструкций INSERT, UPDATE и DELETE Transact-SQL для управления данными FILESTREAM.

ПримечаниеПримечание

В примерах, приведенных в данном разделе, необходимо наличие базы данных с поддержкой FILESTREAM и таблицы, созданной в разделах Как создать базу данных с поддержкой FILESTREAM и Как создать таблицу для хранения данных FILESTREAM.

Вставка строки, содержащей данные FILESTREAM

Чтобы вставить строку в таблицу, которая поддерживает данные FILESTREAM, используйте инструкцию Transact-SQL INSERT. Значение, вставляемое в столбец FILESTREAM, может быть либо значением NULL, либо значением типа varbinary(max).

Вставка значения NULL

Следующий пример иллюстрирует порядок вставки значения NULL. Если значение FILESTREAM равно NULL, компонент Database Engine не создает файл в файловой системе.

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

Вставка записи с нулевой длиной

В следующем примере показано, как использовать инструкцию INSERT для создания записи с нулевой длиной. Это бывает полезно в случае, если нужно получить дескриптор файла, работать с которым предполагается с помощью API-интерфейсов Win32.

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

Создание файла данных

В следующем примере кода показывается, как использовать инструкцию INSERT для создания файла, содержащего данные. Компонент Database Engine преобразует строку Seismic Data в значение типа varbinary(max). FILESTREAM создает файл Windows, если он еще не был создан. Затем данные добавляются в файл данных.

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

При выборке всех данных в таблице Archive.dbo.Records результат напоминает тот, который приведен в следующей таблице. Однако столбец Id будет содержать разные идентификаторы GUID.

Id

SerialNumber

Resume

C871B90F-D25E-47B3-A560-7CC0CA405DAC

1

NULL

F8F5C314-0559-4927-8FA9-1535EE0BDF50

2

0x

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

3

0x536569736D69632044617461

Обновление данных FILESTREAM

Transact-SQL можно использовать для обновления данных файла, хотя это может быть нежелательно при потоковой записи в файл больших объемов данных.

В следующем примере любой текст в записи файла заменяется текстом Xray 1.

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

Удаление данных FILESTREAM

При удалении строки, содержащей поле FILESTREAM, также удаляются и связанные с ней файлы файловой системы. Единственным способом удаления строки и, как следствие, файла является использование инструкции DELETE языка Transact-SQL.

В следующем примере показано, как удалить строку и связанный с ней файл файловой системы.

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

При выборке всех данных в таблице dbo.Archive строка удаляется. Связанный с ней файл больше нельзя использовать.

ПримечаниеПримечание

Базовые файлы удалены сборщиком мусора FILESTREAM.