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

[SQLServer大对象]——FileTable初体验,第1张

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

   1:  EXEC sp_configure filestream_access_level,2
   2:  RECONfigURE 

执行之后,需要重新启动 sql Server 服务

 

创建启动 fileSTRAM 的数据库

在sql Server Managerment studio中,使用Transact-sql创建数据库

   1:  CREATE DATABASE  Archive
   2:  ON
   3:  PRIMARY ( name = ArchiveMDF,
   4:      filename = 'C:\MyData\archdat.mdf'),-- C:\MyData路径必须存在
   5:  fileGROUP fileStreamGroupFirst CONTAINS fileSTREAM( name = ArchivefileSTREAM,
   6:      filename = 'C:\MyData\MyfileStream')      -- C:\MyData路径下MyfileStream文件夹必须不存在
   7:  LOG ON  ( name = ArchiveLDF,
   8:      filename = 'C:\MyData\archlog.ldf')
   9:  GO

运行该脚本后

C:\MyData\MyfileStream 文件夹中会出现filestream.hdr 文件和 $FSLOG 文件夹。filestream.hdr 文件是重要的系统文件,它包含 fileSTREAM 头信息。

 

启用数据库非事务性访问级别

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

修改数据库非事务性访问级别

   1:  ALTER DATABASE Archive
   2:  SET fileSTREAM ( NON_TRANSACTED_ACCESS = FulL,DIRECTORY_name = N'MyDirectory' )    -- 指定数据库访问级别和指定目录名字

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

   1:  CREATE DATABASE Archive
   2:  WITH fileSTREAM ( NON_TRANSACTED_ACCESS = FulL,DIRECTORY_name = N'MyDirectory' )-- 指定数据库访问级别和指定目录名字

查看数据库访问级别

   1:  SELECT DB_name(database_ID),non_transacted_access,non_transacted_access_desc
   2:  FROM sys.database_filestream_options;
   3:  GO

 

filetable

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

不指定用户定义值

   1:  CREATE table documentStores AS filetable;
   2:  GO 

指定用户定义值

   1:  CREATE table documentStores AS filetable
   2:  WITH
   3:  (
   4:      filetable_Directory = 'documentStores',
   5:      filetable_Collate_filename = database_default
   6:  );
   7:  GO 

在没有指定用户定义值时,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 文件和目录层次结构中消失。

总结

以上是内存溢出为你收集整理的[SQLServer大对象]——FileTable初体验全部内容,希望文章能够帮你解决[SQLServer大对象]——FileTable初体验所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存