Поделиться через


Доступ к данным FILESTREAM с помощью Transact-SQL

В этом разделе описывается использование инструкций Transact-SQL INSERT, UPDATE и DELETE для управления данными 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.

Идентификатор SerialNumber Возобновить
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, также удаляются и связанные с ней файлы файловой системы. Единственный способ удалить строку и, следовательно, файл, — использовать инструкцию Transact-SQL DELETE.

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

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

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

Примечание

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

См. также:

Включение и настройка FILESTREAM
Избегание конфликтов в операциях баз данных в приложениях FILESTREAM