Sql2012文件表的使用

Sql2012文件表的使用

一、文件表 使用的相关配置
1.在实例级别启用 FILESTREAM:
右键SQLserver服务——属性——FILESTREAM ——勾选——重启服务

2.更改此 SQL Server 实例的 FILESTREAM 访问级别 :
exec sp_configure N'filestream access level' ,2
reconfigure with override

3.可能需要配置将防火墙配置为进行 FILESTREAM 访问。


二、文件组的操作

--  创建数据库时创建 FILESTREAM 文件组
CREATE DATABASE FileStreamDB 
ON
PRIMARY ( 
    NAME = FileStreamDB, 
    FILENAME = 'D:\data\FileStreamDB.mdf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB
),
FILEGROUP FileStreamGroup CONTAINS FILESTREAM(
     NAME = FileStreamFile, 
     FILENAME = 'D:\data\FileStreamFile',
     MAXSIZE = 50 MB
)
LOG ON (
    NAME = FileStreamDB_log,
    FILENAME = 'D:\data\FileStreamDB_log.ldf'
)
WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'FileStreamPath' )
GO

--添加 FILESTREAM 文件组
ALTER DATABASE [AdventureWorks2012]
ADD FILEGROUP FileStreamGroup CONTAINS FILESTREAM;

ALTER DATABASE [AdventureWorks2012]
ADD FILE
(
     NAME = FileStreamFile, 
     FILENAME = 'D:\data\FileStreamFile',
     MAXSIZE = 50 MB
)
TO FILEGROUP FileStreamGroup
GO


--  在数据库级别上指定 非事务性访问级别 和 FileTable目录(数据库须独占)
ALTER DATABASE [AdventureWorks2012]
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'FileStreamPath' )

--  启用后即可查看到其状态信息
SELECT DB_NAME(database_id) [database],non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options
WHERE non_transacted_access_desc <> 'OFF'

SELECT DB_NAME(database_id) [database],directory_name 
FROM sys.database_filestream_options 
WHERE directory_name IS NOT NULL



三、文件表的操作

--创建文件表DocumentStore
USE [AdventureWorks2012]
GO
CREATE TABLE [DocumentStore] 
AS FileTable
WITH ( 
    --文件目录,不区分大小写,不指定则为filetable名称[DocumentStore]
    FileTable_Directory = N'FileStreamPath',
    FileTable_Collate_Filename = database_default   --排序规则
);
GO

--  更改目录
ALTER TABLE [DocumentStore]
    SET ( FILETABLE_DIRECTORY = N'FileStreamPath' );
GO


--  查看文件表信息
SELECT * FROM sys.filetables;
SELECT * FROM sys.tables WHERE is_filetable = 1;

--  文件表 的相关对象
SELECT parent_object_id,OBJECT_NAME(parent_object_id) AS 'FileTable'
,object_id,OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';



--禁用完全非事务性访问权限:
ALTER DATABASE [AdventureWorks2012]
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );
GO
--  关闭后,路径无法打开
--  \\Kk-pc\mssqlserver\FileStreamPath\FileStreamPath
--  此时文件表 [DocumentStore] 仍可正常操作


ALTER DATABASE [AdventureWorks2012]
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );
GO
--  只读状态,路径可拷贝文件出来,但无法拷贝文件到该目录
--  \\Kk-pc\mssqlserver\FileStreamPath\FileStreamPath
--  此时文件表 [DocumentStore] 仍可正常操作


--  重新启用完全非事务性访问权限
ALTER DATABASE [AdventureWorks2012]
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );
GO


禁用 FileTable 命名空间将会禁用所有系统定义的约束并触发使用 FileTable 创建的约束。

--  禁用 FileTable 命名空间
--  (禁用后路径 \\Kk-pc\mssqlserver\FileStreamPath\FileStreamPath 不可访问)
ALTER TABLE [DocumentStore] DISABLE FILETABLE_NAMESPACE;
GO

--  重新启用 FileTable 命名空间
ALTER TABLE [DocumentStore] ENABLE FILETABLE_NAMESPACE;
GO



四、处理文件表中的记录

--  查看 FileTable
SELECT * FROM [dbo].[DocumentStore]

--  获取特定 FileTable 或当前数据库的根级 UNC 路径。
SELECT FileTableRootPath();
SELECT FileTableRootPath(N'DocumentStore');
SELECT FileTableRootPath(N'dbo.DocumentStore');

--  也可以用GetFileNamespacePath查看 FileTable 中文件或目录的 UNC 路径。
SELECT
 file_stream.GetFileNamespacePath()
,file_stream.GetFileNamespacePath(1, 0)
FROM [dbo].[DocumentStore]

--  删除表 FileTable 中的记录,文件也会被删除
DELETE FROM [dbo].[DocumentStore] WHERE stream_id = 'BA483ECA-AE0E-E511-8367-005056C00008'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值