如何实现SQL Server 2008数据中的文件流功能?

如何实现SQL Server 2008数据中的文件流功能?本文我们主要就介绍这部分内容。SQL Server 2008中***的文件流功能使得你可以配制一个数据类型为varbinary(max)的列,以便将实际数据存储在文件系统中,而非在数据库中。只要愿意,你仍可以作为一个常规的二进制列来查询此列,即使数据自身存储在外部。

文件流特性通过将二进制大字段数据存储在本地文件系统中,从而将Windows新技术文件系统(NTFS)和SQL Server数据库引擎集成在一起。你可以使用Transact-SQL语句来查询、插入或更新数据,或者使用Win32文件系统界面来直接访问数据。

微软建议你仅在以下几种情况下使用文件流:(1)你的二进制大字段数据文件平均大于1M,(2)你需要快速读取此数据,(3)你的应用程序使用中间列来处理应用逻辑。否则,你应该使用常规的varbinary(max)列。

要激活SQL Server 2008服务中的文件流支持,需要遵照以下几步:

配制数据库来支持文件流存储。

定义支持文件流存储的列。

启动SQL Server服务中的文件流支持

要激活SQL Server 2008中指定实例的文件流支持,你必须首先配制此实例的SQL Server服务。在SQL Server配制管理器中,打开服务属性并选择“文件流”页签。

你至少需要选上“启动Transact-SQL文件流访问”勾选框。因为插入及更新数据最有效的方法是通过Win32界面,然而,你也需要激活服务来持文件流(如果有必要,也可以启动允许远程客户端访问文件流数据)。

在你激活了SQL Server服务中的文件流支持后,必须设置文件流访问级别,你可以在SQL Server管理器中设置。要设置访问级别,需执行以下T-SQL语句:

 

  1. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  2. http://www.CodeHighlighter.com/  
  3. EXEC sp_configure filestream_access_level, 2  
  4. GO  
  5. RECONFIGURE  
  6. GO 

 

在这里,我使用系统存储过程sp_configure将访问级别设为2,这个级别可同时支持T-SQL和Win32流访问。如果我想只是支持T-SQL访问,则需要将访问级别设为1。如果设置为0,将会禁用SQL Server实例的文件流支持。在你运行存储过程后,需要运行RECONFIGURE命令来应用新的选项设置。

配制数据库来支持文件流存储

支持文件流存储的下一步操作是向数据库定义中添加一个文件流文件组。文件流文件组是一个特殊的文件组类型,它包含文件系统目录(数据容器)。例如,在下边的数据库定义中,我创建了一个名为FileStreamGrp的文件流文件组。

 

  1. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  2. http://www.CodeHighlighter.com/  
  3. USE master  
  4. GO  
  5. IF EXISTS  
  6. SELECT name FROM sys.databases  
  7. WHERE name = 'HumanResources')  
  8. DROP DATABASE HumanResources  
  9. GO  
  10. CREATE DATABASE HumanResources  
  11. ON  
  12. PRIMARY(  
  13. NAME = HumanRscsDat,  
  14. FILENAME = 'C:/Data/HR/HumanRscsDat.mdf'),  
  15. FILEGROUP FileStreamGrp CONTAINS FILESTREAM(  
  16. NAME = HumanRscsFs,  
  17. FILENAME = 'C:/Data/HR/FileStream')  
  18. LOG ON(  
  19. NAME = HumanRscsLog,  
  20. FILENAME = 'C:/Data/HR/HumanRscsLof.ldf') 

 

注意,文件流文件组定义包括“文件流关键字”,后边跟着逻辑名与文件名。在这里,此文件名仅仅是一个目录路径,没有一个真实的名称。当你指定了路径,每个对象(除了最深的一个)必须存在,且最深的一个不存在。举个例子,目录C:/DATA/HR必须在你运

行此语句之前存在,但是C:/Data/HR/FileStream不能存在。 当你向数据库定义中增加一个文件流文件组,SQL Server将自动创建必要的文件夹及filestream.hdr文件(这个文件是文件流容器的头文件)和$FSLOG文件夹(支持文件流日志)。

定义支持文件流存储的列

设置文件流存储的下一步是配制文件流列。要使一张表包含一个文件流列,它必须也要包含一个ROWGUIDCOL关键字,且此关键字需要配制为非空和唯一约束。这个文件流列对于支持Win32文件流访问来说是必须的。

此文件流列本身必须配制为varbinary(max)类型,并包含FILESTREAM关键字,如下边的建表语句:

 

  1. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  2. http://www.CodeHighlighter.com/  
  3. USE HumanResources  
  4. GO  
  5. IF OBJECT_ID ( N'Candidate', N'U') IS NOT NULL  
  6. DROP TABLE dbo.Candidate  
  7. GO  
  8. CREATE TABLE Candidate(  
  9. CandidateId INT IDENTITY PRIMARY KEY,  
  10. CandidateGuid UNIQUEIDENTIFIER ROWGUIDCOL  
  11. NOT NULL UNIQUE DEFAULT NEWID(),  
  12. CandidateResume VARBINARY(MAX) FILESTREAM NULL 

正如你看到的,列CandidateResume包含FILESTREAM关键字,它在数据类型名称之后。

查询文件流列

一旦你建立了SQL Server来支持文件流存储,就可以使用T-SQL语句来查询并修改数据。例如,以下的插入语向CandidateResume列中添加二进制数据。

 

  1. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  2. http://www.CodeHighlighter.com/  
  3. INSERT INTO Candidate(CandidateResume)  
  4. VALUES (CAST(  
  5. 'Resume test data' AS VARBINARY(MAX))) 

 

然后你可以获取CandidateResume列返回的数据,就好像你从任何其它列获取数据一样。

 

  1. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  2. http://www.CodeHighlighter.com/  
  3. SELECT CandidateResume  
  4. FROM Candidate  
  5. WHERE CandidateId = 1 

 

此SELECT语句返回以下二进制数据集:0x526573756D6520746573742064617461 你也可以轻松地通过替换值来更新数据:

 

  1. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  2. http://www.CodeHighlighter.com/  
  3. UPDATE Candidate  
  4. SET CandidateResume =  
  5. CAST( 'New resume test data' AS VARBINARY(MAX))  
  6. 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 2008数据中的文件流功能的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. SQL Server 2005导入Oracle 10g的C#源码
  2. SQL Server 2008快速清理日志文件的代码
  3. SQL Server 2008数据库中CDC的功能使用及说明
  4. SQL Server 2008阻止保存要求重新创建表的更改的问题
  5. SQL Server数据库row_number() over() 来自动产生行号

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/277697.html<

赞 (0)
管理的头像管理
上一篇2025-05-11 06:01
下一篇 2025-05-11 06:02

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注