FileStream是SQL Server 2008提供的新特性,之前附件在SQL的存储一种是直接放数据库,一种是存储一个路径,附件单独放在磁盘上。前一种方法会使数据库空间更快变大,而且读写占用较多数据库资源,后一种方法使附件的管理脱离于数据库,不能和数据库一起备份,不支持事务等。FileStream的引入同时解决了以上问题,即能带来文件系统读写附件的效率,又能让附件读写处在SQL Server的控制之下。

开启FileStream

操作步骤:
1、在MSSQL实例服务上右键属性,在FileStream面板上将相关选项打上勾;
2、在SSMS上运行:

-- 0表示关闭FileStream访问,1表示只允许T-SQL访问,2表示允许T-SQL和Win32访问
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
 

3、重启SQL服务。

创建支持FileStream的文件组和表

为TestDB增加支持FileStream的文件组:

ALTER DATABASE TestDB ADD FILEGROUP TestDBFG CONTAINS FILESTREAM
 

为文件组添加文件,作为存储文件的路径,注意下面代码中的路径不要已经存在,否则会报错

ALTER DATABASE TestDB ADD FILE (
NAME = FileStrmFile,
FILENAME = 'C:\MyTest\FileStreamPath')
TO FILEGROUP TestDBFG
 

创建带FileStream列的表:

CREATE TABLE dbo.Records
(
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
[SerialNumber] INTEGER UNIQUE,
[Chart] VARBINARY(MAX) FILESTREAM NULL
)
GO
 

执行上面代码后,发现FileStream文件夹已自动创建:

插入文件数据体验效果

下面的代码将一图片插入到表中

DECLARE @img AS VARBINARY(MAX)

SELECT @img = CAST(bulkcolumn AS VARBINARY(MAX))
FROM OPENROWSET(
BULK
'C:\MyTest\TestPic.png',
SINGLE_BLOB ) AS x INSERT INTO Records(Id,SerialNumber,Chart)
SELECT NEWID(), 1,@img
 

用sp_spaceused查看表的占用空间,远比图片本身的空间少。说明表中的二进制列存储的并不是文件本身,而是一个类似文件指针的属性数据。

关于FileStream文件的删除

如果直接运行Delete语句FileStream并不会马上被删除,这是因为SQL并不会实时对它进行维护,而是有一个垃圾回收后台进程在异步处理,当到达一个checkpoint时,才会回收不需要的数据。如果想手动触发,可以直接运行CheckPoint命令达到效果,若数据库的恢复模式是Full,还要先备份事务日志才可以。

【转载】SQL Server FileStream 体验的更多相关文章

  1. SQL Server FileStream (转载)

    从SQL SERVER 2008开始,SQL SERVER引入了一种新的文件组类型叫FileStream文件组,如下图所示: 那么这种文件组是用来做什么的呢? 以往我们对文件管理有两种方法: 数据库只 ...

  2. SQL Server FileStream

    以往我们对文件管理有两种方法: 数据库只保存文件的路径,具体的文件保存在文件服务器(NFS)上,使用时,编程实现从文件服务器读取文件: 将文件直接以varbinary(max)或image数据类型保存 ...

  3. 转载 SQL Server中索引管理之六大铁律

    转载原地址 http://jingyan.baidu.com/article/48a42057c03bd7a924250429.html 索引是以表列为基础的数据库对象.索引中保存着表中排序的索引列, ...

  4. 转载——SQL Server数据库性能优化之SQL语句篇

    转载自:http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 1. 按需索取字段,跟“SELECT *”说拜拜 字段的提取一 ...

  5. SQL Server FileStream优点与不足

    LOB优点: 1.保证大对象的事务一致性. 2.备份与还原包括大数据对象,可以对它进行时点恢复. 3.所有数据都可以使用一种存储与查询环境. LOB不足: 1.大型对象在缓存中占非常大的缓存区. 2. ...

  6. 转载 :sql server分区 http://blog.itpub.net/27099995/viewspace-1081158/

    转载:http://blog.itpub.net/27099995/viewspace-1081158/ 在  sql server 2005 之前不提供分区表,但可以用其他方式建立“分区表”,sql ...

  7. [转载]SQL Server 数据库定时自动备份

    推荐使用SQLserver自带的SSMS工具创建维护计划来实现数据库定时自动备份 “维护计划”是在SSMS的对象资源管理中“管理”节点下面.使用维护计划可以通过可视化的操作,只点点鼠标就可以创建数据库 ...

  8. [转载]SQL Server 2008 R2安装时选择的是windows身份验证,未选择混合身份验证的解决办法

    安装过程中,SQL Server 数据库引擎设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式.本文介绍如何在安装后更改安全模式. 如果在安装过程中选择&q ...

  9. [转载]SQL Server如何保证可空字段中非空值唯一

    原文地址:http://www.cnblogs.com/caspnet/archive/2011/02/23/1962638.html 解决问题是:在一个表里面,有一个允许为空的字段,空是可以重复的, ...

随机推荐

  1. 关于Oracle-VM-VirtualBox的安装与说明

    VirtualBox 是一款开源虚拟机软件.VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件 使用Qt编写,在 Sun 被 Oracle 收购 ...

  2. 第一个java程序进行总结

    1.java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编译我们的java源文件.格式:java ...

  3. 在Centos7上安装JDK1.8和tomcat8.5的步骤和过程(亲测可用)

    文章目录 1.在阿里云(Linux)Centos7上安装JDK1.8步骤过程 2.阿里云(Linux)centos7上安装Tomcat8.5步骤过程记录: 卸载JDK Centos7一般都会带有自己的 ...

  4. VSCode设置鼠标滚轮滑动设置字体大小

    1. 打开"文件->首选项->设置 2. 打开settings.json文件 3. 在setting.json 中添加"editor.mouseWheelZoom&qu ...

  5. 5.websocket原理

      websocket协议原理 1.WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与 ...

  6. MySQL 索引失效-模糊查询,最左匹配原则,OR条件等。

    索引失效 介绍 索引失效就是我们明明在查询时的条件为索引列(包括自己新建的索引),但是索引不能起效,走的是全表扫描.explain 后可查看type=ALL. 这是为什么呢? 首先介绍有以下几种情况索 ...

  7. Cookie、Session、Token与JWT(跨域认证)

    之前看到群里有人问JWT相关的内容,只记得是token的一种,去补习了一下,和很久之前发的认证方式总结的笔记放在一起发出来吧. Cookie.Session.Token与JWT(跨域认证) 什么是Co ...

  8. MongoDB - 简单了解

    什么是 NoSQL NoSQL 是一种非关系型数据库管理系统,不需要固定的架构,可以避免 JOIN 连接,并且易于扩展. NoSQL 常用于具有庞大数据存储需求的分布式数据存储,通常是大数据和实时 W ...

  9. 我要涨知识 —— TypeScript 常见面试题(一)

    1.ts 中的 any 和 unknown 有什么区别? unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形 ...

  10. C#文件路径

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...