在这篇文章中,我们将学习如何管理SQL数据库的FILSTREAM文件组。我将涵盖以下主题。
- 在SQL Server中配置FILESTREAM功能。
- 使用SQL Server管理工作室和T-SQL语句创建FILESTREAM文件组。
- 在文件组中添加多个FILESTREAM文件。
首先,让我们启用FILESTREAM功能。
启用FILESTREAM功能
我们可以使用SQL Server配置管理器工具启用FILESTREAM。要做到这一点,打开SQL Server配置管理器🡪,右击你想启用FILESTREAM功能的SQL Server实例,并点击属性。

在SQL Server属性对话框中,点击FILESTREAM并勾选以下选项。
- 启用FILESTREAM进行Transact-SQL访问
- 为文件I/O访问启用FILESTREAM
- 在Windows共享名称文本框中指定所需的Windows共享名称
- 允许远程客户端访问FILESTREAM数据
屏幕截图

单击 "**确定 "**以保存配置参数。一旦更改被应用,重新启动SQL服务。
配置FILESTREAM的访问级别
一旦FILESTREAM在SQL服务器实例上被启用,我们必须配置FILESTREAM的访问级别。有效的配置值如下。
选项的描述 | T-SQL命令中的值 | 在SQL服务器管理工作室的选项 |
FILESTREAM访问被禁用 | 0 | 禁用 |
T-SQL查询的FILESTREAM访问 | 1 | 启用事务性SQL访问 |
为T-SQL查询和窗口流提供FILESTREAM访问。 | 2 | 启用全面访问 |
要使用SQL Server管理工作室设置上述参数的值,请打开SSMS并连接到SQL Server实例。右键单击实例并选择属性。

在 "服务器属性 "对话框中,点击 "高级"。从FILESTREAM访问级别下拉框中选择启用完全访问选项。

点击 "确定",保存配置并重新启动SQL Server服务。
另外,你可以运行sp_configure命令来设置FILESTREAM的文件访问级别。设置访问级别的配置参数是filestream_access_level。如果你想为T-SQL查询和窗口流启用FILESTREAM访问,查询的写法如下。
1 2 3 4 5 6 | 使用 master 去 exec sp_configure 'filestream_Access_level', 2 重新配置 |
一旦参数被设置,你必须重新启动服务。一旦服务被重新启动,运行sp_configure命令来查看filestream_access_level参数的值。
use master
go
exec sp_configure 'filestream_Access_level', 2
reconfigure
查询输出

正如你所看到的,filestream_access_level参数的值是二(2)。现在,让我们创建一个FILESTREAM文件组。
使用SQL Server Management Studio创建一个FILESTREAM文件组
要使用SSMS创建FILESTREAM文件组,打开它并连接到SQL Server数据库引擎 🡪 右击EltechDB数据库 🡪 选择属性。

在数据库属性对话框中,点击文件组。单击 "添加文件组"。这将在FILESTREAM网格视图中添加一行。在网格视图中指定以下参数。
- **名称。**指定文件组的名称。
- **FILESTREAM 文件。**FILESTREAM 文件的总数。默认值是零(0)。
- **Read-Only(只读)。**如果你想使新的文件组成为只读文件组,那么在只读一栏打勾。
- **默认:**如果你想使新的文件组成为一个默认的FILESTREAM文件组,那么请勾选默认列。
我们正在创建一个名为EmployeeDocument的文件组,所以数据库属性对话框看起来像下面这样。

现在我们必须指定FILESTREAM容器的路径,你想在其中存储文件。要做到这一点,点击数据库属性中的文件。在文件屏幕上,配置选项如下。
- 逻辑名称。指定FILESTREAM容器的名称。在这个演示中,文件名是DF_EmployeeDocument。
- **文件类型。**从下拉框中选择FILESTREAM数据。
- 文件组。选择FILESTREAM文件组。在这个演示中,文件组的名称是EmployeeDocument。
- **路径。**指定我们存储文件的目录的位置。在这个演示中,位置是 D:\EltechDB\EmployeeDocuments。
数据库属性对话框看起来像下面这样。

点击 "确定"来创建一个FILESTREAM容器。现在,让我们了解如何使用T-SQL创建一个FILESTREAM容器。
使用T-SQL查询创建一个FILESTREAM文件组
我们可以使用ALTER DATABASE ADD FILEGROUP语句。我们正在SQL数据库中添加一个FILESTREAM文件组;因此,我们必须指定CONTAINS FILESTREAM关键字。它必须被指定在文件组名称的后面。
添加一个FILESTREAM文件组的语法如下所示。
USE [master]
GO
ALTER DATABASE [DB_Name] ADD FILEGROUP [Filegroup_Name] CONTAINS FILESTREAM
GO
在语法上。
- **Db_name:**指定你要创建FILESTREAM文件组的数据库名称。
- **Filegroup_name:**指定所需的文件组的名称。
我们正在EltechDB数据库中添加一个名为EmployeeDocument的文件组。ADD FILGROUP语句如下
USE [master]
GO
ALTER DATABASE [EltechDB] ADD FILEGROUP [EmployeeDoucment] CONTAINS FILESTREAM
GO
现在,我们必须指定文件流容器的位置。我们正在使用 ALTER DATABASE ADD FILE TO FILEGROUP语句。要添加一个文件,运行下面的T-SQL查询。
USE [master]
GO
ALTER DATABASE [EltechDB] ADD FILE ( NAME = N' DF_Employeedocuments', FILENAME = N' D:\EltechDB\EmployeeDocuments\' ) TO FILEGROUP [EmployeeDoucment]
GO
现在,运行以下查询,查看FILESTREAM文件组的详细信息。
USE eltechdb
go
SELECT df.NAME AS [Logical Name],
df.size / 128 AS [File Size],
fg.NAME AS [FileGroup Name],
df.physical_name AS [Physical Path]
FROM sys.database_files AS df
INNER JOIN sys.filegroups AS fg
ON df.data_space_id = fg.data_space_id;
输出。

正如你所看到的,名为EmployeeDocument的FILESTREAM文件组已经被创建,一个名为DF_EmployeeDocuments的数据文件已经被添加。
在FILESTREAM文件组中添加多个FILESTREAM数据文件
我们可以使用ALTER DATABASE ADD FILE TO FILEGROUP语句在数据库中的Filegroup中添加一个二级FILESTREAM数据文件。假设我们想在EltechDB数据库中添加一个名为DF_EmployeeContract的数据文件。FILSTREAM数据文件的位置是D:\EltechDB\EmployeeContract。查询的内容如下。
USE [master]
GO
ALTER DATABASE [EltechDB] ADD FILE ( NAME = N' DF_EmployeeContracts', FILENAME = N'D:\EltechDB\EmployeeContracts' ) TO FILEGROUP [EmployeeDoucment]
GO
运行以下查询以查看数据文件的详细信息。
USE eltechdb
go
SELECT df.NAME AS [Logical Name],
df.size / 128 AS [File Size],
fg.NAME AS [FileGroup Name],
df.physical_name AS [Physical Path]
FROM sys.database_files AS df
INNER JOIN sys.filegroups AS fg
ON df.data_space_id = fg.data_space_id;
输出

你可以看到,数据文件DF_EmployeeContracts已经被添加到EltechDB的SQL数据库中。
总结
在这篇文章中,我们学习了如何在SQL数据库中管理文件组。我们学习了以下几种情况。
- 如何启用FILESTREAM功能。
- 使用SSMS和T-SQL查询添加一个FILESTREAM文件组。