使用 Transact-SQL 访问 FILESTREAM 数据
本主题介绍如何使用 Transact-SQL INSERT、UPDATE 和 DELETE 语句来管理 FILESTREAM 数据。
注意 |
---|
本主题中的示例需要使用在创建启用了 FILESTREAM 的数据库和创建表以存储 FILESTREAM 数据中创建的启用了 FILESTREAM 的数据库和表。 |
主题内容
插入包含 FILESTREAM 数据的行
更新 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
插入长度为零的记录
下面的示例说明了如何使用 INSERT 创建长度为零的记录。 如果您要获取文件句柄,但使用 Win32 API 来操作文件,这是非常有用的。
INSERT INTO Archive.dbo.Records
VALUES (newid (), 2,
CAST ('' as varbinary(max)));
GO
创建数据文件
下面的示例说明了如何使用 INSERT 创建包含数据的文件。 数据库引擎将字符串 Seismic Data 转换为 varbinary(max) 值。 如果 Windows 文件尚未存在,FILESTREAM 将创建该文件。然后,在数据文件中添加数据。
INSERT INTO Archive.dbo.Records
VALUES (newid (), 3,
CAST ('Seismic Data' as varbinary(max)));
GO
如果选择 Archive.dbo.Records 表中的所有数据,则结果与下表中显示的结果类似。 但是,Id 列将包含不同的 GUID。
Id |
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 垃圾回收器删除的。 |
[返回页首]