阅读导航 启用FILESTREAM设置 更改FILESTRAM设置 启用数据库非事务性访问级别 FileTable 在我接触FileTable之前,存储文件都是存储文件的链接和扩展名到数据,其实并没有实际的把文件存储到数据库。 FileTable不同于一般的表,他可以存储非结构数据和元数据
阅读导航
启用FILESTREAM设置
更改FILESTRAM设置
启用数据库非事务性访问级别
FileTable
在我接触FileTable之前,存储文件都是存储文件的链接和扩展名到数据,其实并没有实际的把文件存储到数据库。
FileTable不同于一般的表,他可以存储非结构数据和元数据(如:文件、文档),存储的文件可以像普通的文件一样通过一个路径被访问,而且不必对客户端程序修改。
FileTable 不支持内存映射文件。 “记事本”和“画图”是两个常见的使用内存映射文件的示例应用程序。 不能在 SQL Server 所在的计算机上使用这些应用程序来打开存储在 FileTable 中的文件。 但是,可以从远程计算机使用这些应用程序来打开存储在 FileTable 中的文件,因为在这些情况下不使用内存映射功能
启用FILESTREAM设置
1. 开始菜单 –> 所有程序 –> Microsoft SQL Server Code-Named 2012 –> 配置工具 –>选择SQL配置管理器。
当然这么一个接着一个的用鼠标点,有点不像搞IT的同学,那么专业一点,使用命令 SQLServerManager10.msc,如果是SQL2005使用 SQLServerManager.msc 打开。
2. 在服务列表中,单击 SQL Server服务器
3. 在 SQL Server配置管理器中,找到 FILESTREAM 的 SQL Server 实例,右键该实例 –> 点击属性
4. SQL Server属性对话框 –> FILESTREAM 选项卡
5. 勾选 Transact-SQL访问启用FILESTREAM 复选框
6. 如果要在Windows中读取和写入 FILESTREAM 数据勾选针对文件I/O流访问启用 FILESTRAM,在Windows共享名框中输入 Windows 共享名称。
这里配置后,FileTable创建好后,就可以想操作本地文件一样在FileTable中操作文件。
7. 如果希望远程访问存储在该共享中的 FILESTREAM 数据,勾选允许远程客户端针对 FILESTREAM 数据流访问
8. 应用
更改FILESTRAM设置
在SQL Server Managerment studio中,使用Transact-SQL修改配置
<span> 1: </span><span>EXEC</span> sp_configure filestream_access_level, 2
<span> 2: </span><span>RECONFIGURE</span>
执行之后,需要重新启动 SQL Server 服务
创建启动 FILESTRAM 的数据库
在SQL Server Managerment studio中,使用Transact-SQL创建数据库
<span> 1: </span><span>CREATE</span> <span>DATABASE</span> Archive
<span> 2: </span><span>ON</span>
<span> 3: </span><span>PRIMARY</span> ( NAME = ArchiveMDF,
<span> 4: </span> FILENAME = <span>'C:\MyData\archdat.mdf'</span>), <span>-- C:\MyData路径必须存在</span>
<span> 5: </span>FILEGROUP FileStreamGroupFirst <span>CONTAINS</span> FILESTREAM( NAME = ArchiveFILESTREAM,
<span> 6: </span> FILENAME = <span>'C:\MyData\MyFileStream'</span>) <span>-- C:\MyData路径下MyFileStream文件夹必须不存在</span>
<span> 7: </span>LOG <span>ON</span> ( NAME = ArchiveLDF,
<span> 8: </span> FILENAME = <span>'C:\MyData\archlog.ldf'</span>)
<span> 9: </span><span>GO</span>
运行该脚本后
C:\MyData\MyFileStream 文件夹中会出现filestream.hdr 文件和 $FSLOG 文件夹。filestream.hdr 文件是重要的系统文件,它包含 FILESTREAM 头信息。
启用数据库非事务性访问级别
为了允许对 SQL Server 中存储文件进行非事务性访问,须在FileTable的数据上设置数据库非事务性访问级别。
修改数据库非事务性访问级别
<span> 1: </span><span>ALTER</span> <span>DATABASE</span> Archive
<span> 2: </span><span>SET</span> FILESTREAM ( NON_TRANSACTED_ACCESS = <span>FULL</span>, DIRECTORY_NAME = N<span>'MyDirectory'</span> ) <span>-- 指定数据库访问级别和指定目录名字</span>
创建数据库时设置非事务性访问级别
<span> 1: </span><span>CREATE</span> <span>DATABASE</span> Archive
<span> 2: </span><span>WITH</span> FILESTREAM ( NON_TRANSACTED_ACCESS = <span>FULL</span>, DIRECTORY_NAME = N<span>'MyDirectory'</span> )<span>-- 指定数据库访问级别和指定目录名字</span>
查看数据库访问级别
<span> 1: </span><span>SELECT</span> DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
<span> 2: </span><span>FROM</span> sys.database_filestream_options;
<span> 3: </span>GO
FileTable
FileTable 是用户表,具有预定义的结构,为了存储 FILESTREAM 数据、文件和目录信息以及文件属性。因此,创建 FileTable 时不需要指定列,但也可以指定,在此我只用最简单的方式创建和使用FileTable。
不指定用户定义值
<span> 1: </span><span>CREATE</span> <span>TABLE</span> DocumentStores <span>AS</span> FileTable;
<span> 2: </span><span>GO</span>
指定用户定义值
<span> 1: </span><span>CREATE</span> <span>TABLE</span> DocumentStores <span>AS</span> FileTable
<span> 2: </span><span>WITH</span>
<span> 3: </span>(
<span> 4: </span> FileTable_Directory = <span>'DocumentStores'</span>,
<span> 5: </span> FileTable_Collate_Filename = database_default
<span> 6: </span>);
<span> 7: </span><span>GO</span>
在没有指定用户定义值时,FILETABLE_DIRECTORY 的值将为 FileTable 的名称,FILETABLE_COLLATE_FILENAME 的值仍为database_default。
此时,就可以在数据库Archive的数据库 –> Tables –> FileTables,可以看到之前创建的FileTable表DocumentStores
在FileTable上右键 –> 浏览,可以直接复制文件到这个目录,图中我新建一个文本文档。
也可以使用语句进行查询
FileTable注意
不能将现有表转换为FileTable。
必须完成上面的步骤启用FILESTREAM设置和更改FILESTRAM设置。
由于FileTable 包含一个 FILESTREAM 列,因此FileTable 需要有效的 FILESTREAM 文件组。
不能在tempdb或任何其他系统数据库中创建FileTable。
不能将FileTable作为临时表。
不能更改 FILETABLE_COLLATE_FILENAME 的值。
不能更改、删除或禁用 FileTable 系统定义的列。
不能将新的用户列、计算列或持久化计算列添加到 FileTable。
删除FileTable时,将删除 FileTable 的所有列以及与该表关联的所有对象,如索引、约束和触发器。
删除FileTable时,FileTable 目录及其子目录将从数据库的 FILESTREAM 文件和目录层次结构中消失。