设为首页 加入收藏

TOP

SQLServer2012新特性(1)T-SQL操作FileTable目录实例(一)
2014-11-23 22:20:20 来源: 作者: 【 】 浏览:29
Tags:SQLServer2012 特性 T-SQL 操作 FileTable 目录 实例
在SQL Server 2008提供FileStream,以借助Windows系统本身的API来强化SQL Server对于非结构化数据的支持后,SQL Server 2012更是推出了像Contained Database、FileTable等令人期待的新功能。对于FileTable的功能和特性,在此无需赘述,本文主要针对FileTable的T-SQL操作目录做一个实例演示。
\ \ \%20\\机器名\SQL实例名\File%20Table 数据库目录\File%20Talbe目录名%20%20此目录层次结构构成了%20FileTable%20的文件命名空间的根。%20在此目录层次结构下,FileTable%20的%20FILESTREAM%20数据作为文件存储,并且存储为也包含文件和子目录的子目录。%20%20请务必记住:在此实例级别%20FILESTREAM%20共享区(即本实例中的“NET2012”)下创建的目录层次结构是虚拟目录层次结构。%20该层次结构存储于%20SQL%20Server%20数据库中,并且在物理上不在%20NTFS%20文件系统中表示。%20访问%20FILESTREAM%20共享区之下和其包含的%20FileTable%20中的文件和目录的所有操作都将被文件系统中嵌入的%20SQL%20Server%20组件拦截和处理。%20%20select%20*%20from%20[dbo].MyFileTable01;%20%20注意:上图并没有目录结构,换句话说,都是位于根目录下的“平级”文件。如果要获取文件的完整路径,这需要结合使用%20FileTableRootPath%20(Transact-SQL)%20和%20GetFileNamespacePath%20(Transact-SQL)%20函数查看完整路径:%20USE%20LearnFileTable;%20DECLARE%20@root%20nvarchar(100);%20DECLARE%20@fullpath%20nvarchar(1000);%20%20SELECT%20@root%20=%20FileTableRootPath();%20SELECT%20@fullpath%20=%20@root%20+%20file_stream.GetFileNamespacePath()%20%20%20%20%20FROM%20[dbo].MyFileTable01%20%20%20%20%20WHERE%20name%20=%20N'DemoExcel.xlsx';%20%20PRINT%20@fullpath;%20GO%20%20除了手动创建目录、还可以通过T-SQL创建FileTable目录。%20四、通过T-SQL创建FileTable目录%20这个过程我们分三步:%20(1)创建一个新目录%20INSERT%20INTO%20dbo.MyFileTable01(name,%20is_directory)%20SELECT%20'MyDir01',%201;%20%20select%20stream_id,file_stream,name,path_locator,is_directory%20from%20[dbo].MyFileTable01;%20%20(2)插入一个空白文件到新目录:%20%20DECLARE%20@path%20%20%20%20%20%20%20%20HIERARCHYID%20DECLARE%20@new_path%20%20%20%20VARCHAR(675)%20%20SELECT%20@path%20=%20path_locator%20FROM%20dbo.MyFileTable01%20WHERE%20name%20=%20'MyDir01'%20%20SELECT%20@new_path%20=%20@path.ToString()%20%20%20%20%20+%20CONVERT(VARCHAR(20),%20CONVERT(BIGINT,%20SUBSTRING(CONVERT(BINARY(16),%20NEWID()),%201,%206)))%20+%20'.'%20+%20CONVERT(VARCHAR(20),%20CONVERT(BIGINT,%20SUBSTRING(CONVERT(BINARY(16),%20NEWID()),%207,%206)))%20+%20'.'%20+%20CONVERT(VARCHAR(20),%20CONVERT(BIGINT,%20SUBSTRING(CONVERT(BINARY(16),%20NEWID()),%2013,%204)))%20+%20'/'%20%20INSERT%20INTO%20dbo.MyFileTable01(name,%20file_stream,%20path_locator)%20SELECT%20N'空文件.txt',%200x,%20@new_path%20%20select%20stream_id,file_stream,name,path_locator,is_directory%20from%20[dbo].MyFileTable01;%20%20%20如果你不想使用newId(),而要使用SQL%20Server本身提供的hierarchyid层次结构,可以使用下面这个函数:%20%20CREATE%20FUNCTION%20[dbo].[fnGetNewPathLocator]%20%20%20%20%20%20(@child%20uniqueidentifier%20%20%20%20%20,@parent%20hierarchyid%20=%20NULL)%20RETURNS%20%20%20%20hierarchyid%20AS%20BEGIN%20%20%20%20%20DECLARE%20%20%20%20@result%20hierarchyid,%20%20%20%20%20%20%20%20%20@binId%20binary(16)%20=%20CONVERT(binary(16),%20@child);%20%20%20%20%20SELECT%20@result%20=%20hierarchyid::Parse%20%20%20%20%20%20%20%20%20(%20%20%20%20%20%20%20%20%20%20%20%20%20COALESCE(@parent.ToString(),%20N'/')%20+%20%20%20%20%20%20%20%20%20%20%20%20%20CONVERT(nvarchar,%20CONVERT(bigint,%20SUBSTRING(@binId,%201,%206)))%20+%20N'.'%20+%20%20%20%20%20%20%20%20%20%20%20%20%20CONVERT(nvarchar,%20CONVERT(bigint,%20SUBSTRING(@b
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.SQL统计某张表的列数。 下一篇一道SQL题考你数据库的使用能力

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: