Доступ к данным 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