注意,文件流文件组定义包括“文件流关键字”,后边跟着逻辑名与文件名。在这里,此文件名仅仅是一个目录路径,没有一个真实的名称。当你指定了路径,每个对象(除了最深的一个)必须存在,且最深的一个不存在。举个例子,目录C:DATAHR必须在你运行此语句之前存在,但是C:DataHRFileStream不能存在。
当你向数据库定义中增加一个文件流文件组,SQL Server将自动创建必要的文件夹及filestream.hdr文件(这个文件是文件流容器的头文件)和$FSLOG文件夹(支持文件流日志)。 定义支持文件流存储的列 设置文件流存储的下一步是配制文件流列。要使一张表包含一个文件流列,它……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
注意,文件流文件组定义包括“文件流关键字”,后边跟着逻辑名与文件名。在这里,此文件名仅仅是一个目录路径,没有一个真实的名称。当你指定了路径,每个对象(除了最深的一个)必须存在,且最深的一个不存在。举个例子,目录C:DATAHR必须在你运行此语句之前存在,但是C:DataHRFileStream不能存在。
当你向数据库定义中增加一个文件流文件组,SQL Server将自动创建必要的文件夹及filestream.hdr文件(这个文件是文件流容器的头文件)和$FSLOG文件夹(支持文件流日志)。
定义支持文件流存储的列
设置文件流存储的下一步是配制文件流列。要使一张表包含一个文件流列,它必须也要包含一个ROWGUIDCOL关键字,且此关键字需要配制为非空和唯一约束。这个文件流列对于支持Win32文件流访问来说是必须的。
此文件流列本身必须配制为varbinary(max)类型,并包含FILESTREAM关键字,如下边的建表语句:
USE HumanResources GO IF OBJECT_ID ( N'Candidate', N'U') IS NOT NULL DROP TABLE dbo.Candidate GO CREATE TABLE Candidate( CandidateId INT IDENTITY PRIMARY KEY, CandidateGuid UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(), CandidateResume VARBINARY(MAX) FILESTREAM NULL |
查询文件流列
一旦你建立了SQL Server来支持文件流存储,就可以使用T-SQL语句来查询并修改数据。例如,以下的插入语向CandidateResume列中添加二进制数据。
INSERT INTO Candidate(CandidateResume) VALUES (CAST( 'Resume test data' AS VARBINARY(MAX))) |
SELECT CandidateResume FROM Candidate WHERE CandidateId = 1 |
此SELECT语句返回以下二进制数据集:0x526573756D6520746573742064617461
你也可以轻松地通过替换值来更新数据:
UPDATE Candidate SET CandidateResume = CAST( 'New resume test data' AS VARBINARY(MAX)) WHERE CandidateId = 1 |
注意,我传递进去的是一个二进制值。如果你重新执行上边的SELECT语句,你现在会获以下结果:
0x4E657720726573756D6520746573742064617461
正如你在前边的例子中看到的,使用T-SQL语句来访问列CandidateResume的数据是一个便捷的过程。然而,很显然,我插入并更新的测试数据要比你在一般情况下存储在FILESTREAM列中的数据要小很多。实际上,你通常会希望使用Win32文件流来访问数据。
为了支持Win32文件流,SQL Server 2008提供函数和API,可使得从你的应用程序访问。尽管关于Win32文件流不是本篇文章讨论的范围之内,但了解SQL Server2008中文件流功能轻松地支持从应用程序高效数据访问是很重要的。
获得更多关于文件流数据的Win32流细节信息,请参考SQL Server 2008在线图书中的主题:通过使用Win32来管理文件流数据。你通常也可以在主题文件流存储的设计与实现中获得更多关于文件流存储的细节信息。同时,你目前应该已经有了当你在SQL Server实例中建立文件流存储并定义支持文件流存储的列时所需要的相关细节信息。
翻译
相关推荐
-
SQL Server 2016新变化:内存中OLTP功能大改进
SQL Server 2016的许多功能得到改进,内存中OLTP(in-memory OLTP)也不例外,包括扩展性、性能以及扩展T-SQL用于使用和管理内存优化表的功能方面。
-
优化T-SQL提升SQL Server数据库性能
本文中提供了八种优化T-SQL代码避免SQL Server数据库性能瓶颈的技巧,我们可以据此优化数据库应用。
-
配置SQL Server数据库恢复模式的两种方法
本文我们讨论了配置SQL Server恢复模式的两种方式,用T-SQL或者SQL Server管理工具都可以修改恢复模式的设置。
-
用T-SQL在SQL Server 2012中创建用户自定义角色
SQL Server 2012中引入了两项功能,即创建用户自定义服务器角色和分配服务器级别的权限。本文为初级DBA给出了一个用户自定义服务器角色的示范用例。