本主题介绍如何使用 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 垃圾回收器删除的。