SQL Server ->> FileTable
FileTable是SQL Server 2012的新特性之一。它是基于SQL Server 2008的FILESTREAM特性上而来的,允许我们把Windows文件存储在SQL Server中,让SQL Server可以存储非结构化的数据。也就是存是存在SQL Server中,像backup这种SQL Server这种操作也可以兼顾到,但是对于文件的访问时是通过Windows文件系统来访问的。FileTable和Windows文件的命名空间达到兼容,还可以和SQL Server的全文索引(fulltext)和语义搜索(semantic search)结合。以往我们都是通过文件服务器来管理文件,由于SQL Server提供了对文件管理的支持和整合,所以FileTable成了和应用程序相结合起来管理文件的一个好的办法,而且它又具备了一些SQL Server的特性,比如backup的支持,而应用程序可以如常的从文件系统的角度去访问文件。
和Windows达到兼容性
既然和Windows达到兼容性,那么FileTable(或者它自身具备的FileStream的特性)就应该是和具备Windows API的一些特性,如:
1)非事务型流数据访问和就地(原)文件更新;
2)层级命名空间(文件目录结构和文件);
3)文件属性,如文件创建日期和修改日期;
4)对Windows文件和目录的管理;
FileTable的结构
FileTable的结构是固定是。表中的每一行数据代表了一个文件,表中的栏位代表了文件的一些属性列,像文件创建时间和修改时间,以及文件的路径。参考FileTable Schema
我们都知道FILESTREAM是基于Windows文件系统的共享功能,那么FileTable也不例外。我们通过在FILESTREAM共享路径下创建根路径给一张FileTable。FileTable和T-SQL也是结合的,允许被更新和查询数据。
Windows文件系统和SQL Server间的整合
对FILETABLE根目录的任何改动,比如对文件的创建更新删除都会反映到FILETABLE表中。
事务性和非事务性
FileTable作为一张SQL Server表,表的数据更新是支持事务性的。但是由于对文件的操作是属于一个Windows文件系统的操作行为,是不具备事务性的。而FILESTREAM其实是支持事务性的。
FileTable和FileStream的关系
FileTable依赖于FileStream特性。FileTable本身是需要启用non-transactional access选项,但是不代表说FileStream本身是必须开启这个选项的。也就是如果我不使用FileTable,我再添加FILESTREAM FILEGROUP的时候是不需要启用non-transactional access选项。其次,FileStream可能包含FileTable的数据和其他应用程序的数据,然后FileTable的non-transactional access选项并不对其他的数据造成影响。
使用FileTable前先开启FileStream功能,这个功能要么你在安装的时候就勾选启用选项,要么你就开启server-level configuration。需要说明由于filestream功能使用了139和445端口,所以防火墙要允许139(inbound)和445(inbound)端口。
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
再开启数据库的filestream功能
ALTER DATABASE JerryDB
SET FILESTREAM
(
NON_TRANSACTED_ACCESS = FULL,
DIRECTORY_NAME = N'FileTable1'
);
加入一个FILESTREAM FILEGROUP到当前数据库
ALTER DATABASE JerryDB
ADD FILEGROUP FILESTREAM_FG
CONTAINS FILESTREAM;
为当前的文件组添加一个共享路径
ALTER DATABASE JerryDB
ADD FILE
(
NAME= 'FILESTREAM_File1',
FILENAME = 'F:\Database Log Files\FILESTREAM_File1'
)
TO FILEGROUP FILESTREAM_FG;
数据库的配置完成后就可以创建filetable了。除了下面两个选项,还可以指定表的主键约束等三个约束的名字
CREATE TABLE DemoFileTable AS FILETABLE
WITH
(
FILETABLE_DIRECTORY = 'FileTable1',
FILETABLE_COLLATE_FILENAME = database_default
);
GO
创建完表之后你可以通过Windows Explorer在FileStream共享路径下新建、删除、修改文件,共享路径为
\\SERVERNAME\FILESTREAM_WINDOWS_SHARE_NAME\FILESTREAM_TABLE_NAME\FILETABLE_DIRECTORY\
结果也会反映到FileTable中。你甚至可以更新文件的名字、创建日期、修改日期等。这些改动同样会反映到文件本身的NTFS文件系统属性。
获取文件完整路径
SELECT FileTableRootPath()+[file_stream].GetFileNamespacePath(),
GetPathLocator(FileTableRootPath()+[file_stream].GetFileNamespacePath()),
path_locator
FROM [JerryDB].[dbo].[DemoFileTable]
参考:
Full Text Searches on Documents in FileTables
FileTable Feature in SQL Server 2012
SQL Server ->> FileTable的更多相关文章
- SQL Server 2012 新特性:FileTable
FileTable是基于FILESTREAM的一个特性.有以下一些功能: 一行表示一个文件或者目录. 每行包含以下信息: file_Stream流数据,stream_id标示符(GUID). 用户表示 ...
- SQL Server 2012新特性(1)T-SQL操作FileTable目录实例
在SQL Server 2008提供FileStream,以借助Windows系统本身的API来强化SQL Server对于非结构化数据的支持后,SQL Server 2012更是推出了像Contai ...
- 【转】使用SQL Server 2012的FileTable轻松管理文件
一 .FileStream和FileTable介绍 我们经常需要把结构化数据(int.Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢? 1. 在SQL Se ...
- SQL SERVER 2014 各个版本支持的功能
转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称 Enterprise Business Intelligence Stan ...
- SQL Server 2012 各版本功能比较
有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Service ...
- SQL SERVER 自带系统存储过程分类
目录存储过程 用于实现 ODBC 数据字典功能,并隔离 ODBC 应用程序以使其不受基础系统表更改的影响. 变更数据捕获存储过程 用于启用.禁用.或报告变更数据捕获对象. 游标存储过程 用于实现游标变 ...
- SQL Server主要系统视图说明
SELECT * FROM sys.all_columns --显示属于用户定义对象和系统对象的所有列的联合--https://docs.microsoft.com/zh-cn/sql/relatio ...
- SQL Server Replication 总结
合并复制中,数据库架构的更改要重新生成发布端的快照 在SQL Server 合并复制中,如果在发布端做了数据库架构的更改(例如新建表,更改表结构等),原则上来说都需要重新生成发布端的快照,订阅端才能同 ...
- SQL Server 2017 on Linux
此文转载,原文地址:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-whats-new CTP 2.0 The CTP 2.0 ...
随机推荐
- 3-----Docker实例-安装MySQL
Docker 安装 MySQL 方法一.docker pull mysql 查找Docker Hub上的mysql镜像 runoob@runoob:/mysql$ docker search mysq ...
- python 库 、包 、模块
概念: 模块: 模块是一种以.py为后缀的文件,在.py文件中定义了一些常量和函数.模块的名称是该.py文件的名称.模块的名称作为一个全局变量__name__的取值可以被其他模块获取或导入. 模块的导 ...
- APP开发的三种技术对比
目前来说主流的App开发方式有三种:Native App .Web App.Hybird App.下面我们来分析一下这三种App开发方式的优劣对比: 一 :Native App 即 原生App开发 优 ...
- Ubuntu 16.04 compare 软件安装
1软件官网 http://www.scootersoftware.com/download.php?zz=kb_linux_install 2.打开上述网址可看到安装信息 终端安装方式: wget h ...
- 使用Hive Rest API 连接HDInsight
以下连接是微软最新的关于HDInsight中Hive命令的RestAPI示例地址.. 使用 HDInsight .NET SDK 运行 Hive 查询 请使用接口有异常的同学检查是否使用的是下面地址中 ...
- selenium+Python(Page Object 设计模式实例)
以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...
- 2018年javaee学习目标
我打算在本学期的学习中把java ee掌握并能熟练应用,如果可以的话还打算编写一个后台服务程序,增加自己的实战经验.
- Wamp设置虚拟目录
1. 默认安装 wamp后,工作目录为"..../wamp/www" 也就是PHP文件只有放在此目录下才能打得开,打开Apache的配置文件httpd.conf可以看到: 这么两行 ...
- poj 3601 Tower of Hanoi
Tower of Hanoi Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 1853 Accepted: 635 De ...
- css用hover制作下拉菜单
首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang="en&q ...