使用 Transact-SQL 访问 FILESTREAM 数据

本主题介绍如何使用 Transact-SQL INSERT、UPDATE 和 DELETE 语句来管理 FILESTREAM 数据。

注释

本主题中的示例需要使用在 创建 FILESTREAM-Enabled 数据库创建用于存储 FILESTREAM 数据的表 中启用了 FILESTREAM 的数据库和表。

插入包含 FILESTREAM 数据的行

若要向支持 FILESTREAM 数据的表添加行,请使用 Transact-SQL INSERT 语句。 将数据插入 FILESTREAM 列时,可以插入 NULL 或 varbinary(max) 值。

插入 NULL

下面的示例演示如何插入 NULL。 FILESTREAM 值 NULL时,数据库引擎不会在文件系统中创建文件。

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

插入 Zero-Length 记录

以下示例演示如何用于 INSERT 创建零长度记录。 这在您想获取文件句柄但需要使用Win32 API操作文件时很有用。

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

创建数据文件

以下示例演示如何用于 INSERT 创建包含数据的文件。 数据库引擎将字符串 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 序列号 简历
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 应用程序中的数据库操作发生冲突