阅读导航
启用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修改配置

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

执行之后,需要重新启动 SQL Server 服务
 
创建启动 FILESTRAM 的数据库
在SQL Server Managerment studio中,使用Transact-SQL创建数据库

CREATE DATABASE  Archive
ON
PRIMARY ( NAME = ArchiveMDF,
FILENAME = 'C:\MyData\archdat.mdf'), -- C:\MyData路径必须存在
FILEGROUP FileStreamGroupFirst CONTAINS FILESTREAM( NAME = ArchiveFILESTREAM,
FILENAME = 'C:\MyData\MyFileStream') -- C:\MyData路径下MyFileStream文件夹必须不存在
LOG ON ( NAME = ArchiveLDF,
FILENAME = 'C:\MyData\archlog.ldf')
GO

运行该脚本后
C:\MyData\MyFileStream 文件夹中会出现filestream.hdr 文件和 $FSLOG 文件夹。filestream.hdr 文件是重要的系统文件,它包含 FILESTREAM 头信息。

启用数据库非事务性访问级别
为了允许对 SQL Server 中存储文件进行非事务性访问,须在FileTable的数据上设置数据库非事务性访问级别。
修改数据库非事务性访问级别

ALTER DATABASE Archive
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'MyDirectory' ) -- 指定数据库访问级别和指定目录名字

创建数据库时设置非事务性访问级别

CREATE DATABASE Archive
WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'MyDirectory' )-- 指定数据库访问级别和指定目录名字

查看数据库访问级别

SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options;
GO

为什么要设置非事务性访问级别

存储在 FileTable 中的文件和目录数据通过用于非事务性文件访问的 Windows 共享区(针对基于 Windows API 的应用程序)公开。 对于 Windows 应用程序,这看起来像一个包含文件和目录的普通共享区。 应用程序可使用一组广泛的 Windows API,用于对此共享区下的文件和目录进行管理。意思就是说如果你想用C#等高级语言的API,来访问FileTable 中的文件和目录就必须启用数据库非事务性访问级别。

FileTable

FileTable 是用户表,具有预定义的结构,为了存储 FILESTREAM 数据、文件和目录信息以及文件属性。因此,创建 FileTable 时不需要指定列,但也可以指定,在此我只用最简单的方式创建和使用FileTable。

不指定用户定义值

CREATE TABLE DocumentStores AS FileTable;
GO

指定用户定义值

CREATE TABLE DocumentStores AS FileTable
WITH
(
FileTable_Directory = 'DocumentStores',
FileTable_Collate_Filename = database_default
);
GO

在没有指定用户定义值时,FILETABLE_DIRECTORY 的值将为 FileTable 的名称,FILETABLE_COLLATE_FILENAME 的值仍为database_default。
此时,就可以在数据库Archive的数据库 –> Tables –> FileTables,可以看到之前创建的FileTable表DocumentStores
在FileTable上右键 –> 浏览,可以直接复制文件到这个目录,图中我新建一个文本文档。

也可以使用语句进行查询

当然FileTable表中不仅可以包含文件,还可以包含目录(文件夹),如下图所示,我们在FileTable表DocumentStores中,新建了一个文件:文件1.txt,和两个目录:DemoFolder1DemoFolder2

其中在目录DemoFolder2中,我们还创建了另一个文件:文件2.txt

这时我们查询表DocumentStores会得到四条记录,分别对应两个文件和两个目录,其中可以通过列parent_path_locator和path_locator的值,知道文件2.txt在目录DemoFolder2

如果我们用SQL语句删除文件文件1.txt

可以看到共享目录下文件1.txt也相应地被删除了

但是这里并不建议使用SQL语句来删除FileTable表中的文件和目录,因为这可能会违反FileTable表的约束。最好通过文件系统或Windows API,来对FileTable表中的文件和目录进行操作。

FileTable注意
不能将现有表转换为FileTable。
必须完成上面的步骤启用FILESTREAM设置更改FILESTRAM设置
由于FileTable 包含一个 FILESTREAM 列,因此FileTable 需要有效的 FILESTREAM 文件组。
不能在tempdb或任何其他系统数据库中创建FileTable。
不能将FileTable作为临时表。
不能更改 FILETABLE_COLLATE_FILENAME 的值。
不能更改、删除或禁用 FileTable 系统定义的列。
不能将新的用户列、计算列或持久化计算列添加到 FileTable。
删除FileTable时,将删除 FileTable 的所有列以及与该表关联的所有对象,如索引、约束和触发器。
删除FileTable时,FileTable 目录及其子目录将从数据库的 FILESTREAM 文件和目录层次结构中消失。

益处

此外个人觉得使用FileTable的最大好处是,在备份数据库的时候, FileTable表中的所有文件和目录会一并放入.bak数据库备份文件,然后在还原数据库的时候,也会一起被还原出来。

MSDN上关于FileTable的介绍

原文链接

[SQLServer大对象]——FileTable初体验 (转载)的更多相关文章

  1. [SQLServer大对象]——FileTable初体验

    阅读导航 启用FILESTREAM设置 更改FILESTRAM设置 启用数据库非事务性访问级别 FileTable 在我接触FileTable之前,存储文件都是存储文件的链接和扩展名到数据,其实并没有 ...

  2. [SQLServer大对象]——FileTable从文件系统迁移文件

    阅读导航 从文件系统中迁移文件到FileTable 批量加载文件到FileTable 如何批量加载文件到FileTable 通过博文[SQLServer大对象]——FileTable初体验,已经可以将 ...

  3. FileTable初体验

    FileTable初体验 阅读导航 启用FILESTREAM设置 更改FILESTRAM设置 启用数据库非事务性访问级别 FileTable 在我接触FileTable之前,存储文件都是存储文件的链接 ...

  4. ARKit从入门到精通(1)-ARKit初体验

    ARKit从入门到精通(1)-ARKit初体验 转载自:http://blog.csdn.net/u013263917/article/details/72903174 该系列文章共十篇,笔者将由易到 ...

  5. Scrapy初体验(一) 环境部署

    系统选择centOs 7,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, ...

  6. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  7. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  8. node.js 初体验

    node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...

  9. 文档数据库RavenDB-介绍与初体验

    文档数据库RavenDB-介绍与初体验 阅读目录 1.RavenDB概述与特性 2.RavenDB安装 3.C#开发初体验 4.RavenDB资源 不知不觉,“.NET平台开源项目速览“系列文章已经1 ...

随机推荐

  1. 22-hadoop-hive搭建

    1, hive简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是 ...

  2. 【转】kafka集群搭建

    转:http://www.cnblogs.com/luotianshuai/p/5206662.html Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否 ...

  3. 【IT笔试面试题整理】二叉搜索树转换为双向链表

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  4. MarkdownPad编写博客技巧笔记

    说明 想约束自己使用博客来记录自己的内容,发现CSDN能导入.md文件,就查了查使用方式,发现确实比较好用的,本文档就是使用MarkdownPad编写,生成.md上传的.记录下使用方法 Markdow ...

  5. ADO.NET 【类库】【与数据库的连接】

    ADO.NET是什么,有什么用 数据库访问技术 ado.net可让开发人员以一致的方式存取资料来源, 资料共用的消费者应用程序可使用ado.net 来连接至这些资料来源,并且撷取.处理及更新其中所含的 ...

  6. java 传入list集合 返回树形菜单,for循环遍历

    public List<SysPermissionVO> getTreeMenu(List<SysPermissionVO> list,SysPermissionVO sysP ...

  7. Oracle总结之plsql编程(基础七)

    紧接基础六,对oracle角色和权限的管理之后,在接下来的几次总结中来就最近工作中用过的plsql编程方面的知识进行总结,和大家分享! 原创作品,转自请注明出处:https://www.cnblogs ...

  8. 从返回的json格式的data数据内随机取得n个

    var arr=[ { "ceo":"张无忌", "conmpany":"阿里妈妈有限公司", "addres ...

  9. 天天生鲜 - App设计

    天天生鲜-思路数据库设计 天天生鲜-各个App 全文检索 天天生鲜-静态文件 一.项目目录 daily_fresh_demo - daily_fresh_demo - df_cart # 购物车功能 ...

  10. django-xss攻击原理与防范

    一.跨站脚本攻击(XSS) XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.也属一种注入攻击,注入本质上就是把输入的数据变成可执行的程序 ...