Step 1: 启用Filestream功能
-
在 “开始” 菜单中,依次指向 “所有程序”、 SQL Server 2016、 “配置工具”,然后单击 “SQL Server 配置管理器”。
-
在服务列表中,右键单击“SQL Server 服务”,然后单击“打开”。
-
在“SQL Server 配置管理器”管理单元中,找到要在其中启用 FILESTREAM 的 SQL Server 实例。
-
右键单击该实例,然后单击“属性”。
-
在 “SQL Server 属性” 对话框中,单击 “FILESTREAM” 选项卡。
-
选中“针对 Transact-SQL 访问启用 FILESTREAM”复选框。
-
如果要在 Windows 中读取和写入 FILESTREAM 数据,请单击“针对文件 I/O 流访问启用 FILESTREAM”。 在 “Windows 共享名” 框中输入 Windows 共享的名称。
-
如果远程客户端必须访问存储在此共享中的 FILESTREAM 数据,请选择 “允许远程客户端针对 FILESTREAM 数据启用流访问”。
-
单击 “应用”。
-
在 SQL Server Management Studio中,单击 “新建查询” 以显示查询编辑器。
-
在查询编辑器中,输入以下 Transact-SQL 代码:
Transact-SQLEXEC sp_configure filestream_access_level, 2 RECONFIGURE
-
单击 “执行”。
-
重新启动 SQL Server 服务。
Step 2-1 创建一个新的数据库
-- Create Database
CREATE DATABASE FileTableDB
ON PRIMARY
(Name = FileTableDB,
FILENAME = 'D:\FileTable\FTDB.mdf'),
FILEGROUP FTFG CONTAINS FILESTREAM
(NAME = FileTableFS,
FILENAME='D:\FileTable\FS')
LOG ON
(Name = FileTableDBLog,
FILENAME = 'D:\FileTable\FTDBLog.ldf')
WITH FILESTREAM (NON_TRANSACTED_ACCESS = FULL,
DIRECTORY_NAME = N'FileTableDB');
GO
Step 2-2查看FileStream 功能是否打开
-- Check the Filestream Options
SELECT DB_NAME(database_id),
non_transacted_access,
non_transacted_access_desc
FROM sys.database_filestream_options;
GO
Step 3创建一个新的filetable
-- Create FileTable Table
USE FileTableDB
GO
CREATE TABLE FileTableTb AS FileTable
WITH
(FileTable_Directory = 'FileTableTb_Dir');
GO
可以像其他sql table 一样使用select 语句去查询
SELECT * FROM FileTableTb
FileTable的数据字典如下表所示
文件属性名称 | type | Size | 默认 | 说明 | 文件系统可访问性 |
path_locator | hierarchyid | 变量 | 一个标识此项的位置的 hierarchyid 。 | 此节点在分层 FileNamespace 中的位置。 | 可通过设置 Windows 路径值来创建和修改。 |
stream_id | [uniqueidentifier] rowguidcol | 由 NEWID() 函数返回的值。 | FILESTREAM 数据的唯一 ID。 | 不适用。 | |
file_stream | varbinary(max) | 变量 | NULL | 包含 FILESTREAM 数据。 | 不适用。 |
file_type | nvarchar(255) | 变量 | NULL。 | 表示文件的类型。 | 自动计算。 无法设置。 |
名称 | nvarchar(255) | 变量 | GUID 值。 | 文件或目录的名称。 | 可使用 Windows API 创建或修改。 |
parent_path_locator | hierarchyid | 变量 | 一个标识包含此项的目录的 hierarchyid 。 | 包含目录的 hierarchyid 。 | 自动计算。 无法设置。 |
cached_file_size | bigint | FILESTREAM 数据的大小(以字节为单位)。 | 虽然缓存文件的大小会自动保持更新,但在特殊情况下也可能会出现不同步的问题。 若要计算确切的大小,请使用 DATALENGTH() 函数。 | ||
creation_time | datetime2(4) | 8 字节 | 当前时间。 | 文件的创建日期和时间。 | 自动计算。 也可以通过使用 Windows API 设置。 |
last_write_time | datetime2(4) | 8 字节 | 当前时间。 | 上次更新文件的日期和时间。 | 自动计算。 也可以通过使用 Windows API 设置。 |
last_access_time | datetime2(4) | 8 字节 | 当前时间。 | 上次访问文件的日期和时间。 | 自动计算。 也可以通过使用 Windows API 设置。 |
is_directory | bit | 1 字节 | FALSE | 指示行是否表示目录。 此值由系统自动计算,无法设置。 | 自动计算。 无法设置。 |
is_offline | bit | 1 字节 | FALSE | 脱机文件属性。 | 自动计算。 也可以通过使用 Windows API 设置。 |
is_hidden | bit | 1 字节 | FALSE | 隐藏文件属性。 | 自动计算。 也可以通过使用 Windows API 设置。 |
is_readonly | bit | 1 字节 | FALSE | 只读文件属性。 | 自动计算。 也可以通过使用 Windows API 设置。 |
is_archive | bit | 1 字节 | FALSE | 存档属性。 | 自动计算。 也可以通过使用 Windows API 设置。 |
is_system | bit | 1 字节 | FALSE | 系统文件属性。 | 自动计算。 也可以通过使用 Windows API 设置。 |
is_temporary | bit | 1 字节 | FALSE | 临时文件属性。 | 自动计算 |
Step 4 打开文件实际存储路径