实现SQL Server 2008中的文件流功能(下)

 
   | |

导读:本部分介绍了如何配制数据库来支持文件流存储,包括定义支持文件流存储的列,查询文件流列。

关键词:ROWGUIDCOL SQL Server 2008 文件流 T-SQL

正在加载数据... 【TechTarget中国原创】注意,文件流文件组定义包括“文件流关键字”,后边跟着逻辑名与文件名。在这里,此文件名仅仅是一个目录路径,没有一个真实的名称。当你指定了路径,每个对象(除了最深的一个)必须存在,且最深的一个不存在。举个例子,目录C:\DATA\HR必须在你运行此语句之前存在,但是C:\Data\HR\FileStream不能存在。

【TechTarget中国原创】注意,文件流文件组定义包括“文件流关键字”,后边跟着逻辑名与文件名。在这里,此文件名仅仅是一个目录路径,没有一个真实的名称。当你指定了路径,每个对象(除了最深的一个)必须存在,且最深的一个不存在。举个例子,目录C:\DATA\HR必须在你运行此语句之前存在,但是C:\Data\HR\FileStream不能存在。

  当你向数据库定义中增加一个文件流文件组,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
  正如你看到的,列CandidateResume包含FILESTREAM关键字,它在数据类型名称之后。

  查询文件流列

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

  

   INSERT INTO Candidate(CandidateResume)
  VALUES (CAST(
  'Resume test data' AS VARBINARY(MAX)))
  然后你可以获取CandidateResume列返回的数据,就好像你从任何其它列获取数据一样。

  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可用性

 
SQL Server能从虚拟化中受益。但在虚拟之前,确保主机服务器能够胜任。同样的,容量规划和性能监控也是虚拟化过程的关键部分。
 
集群在大多数情况下是最昂贵的选择,但是它可以提供更好地灵活性与自动化程度。在出现故障的情况下,集群技术可以提供最小的数据丢失。
 
目前,高可用性对于关键业务来说已经越来越重要。除去大量的第三方高可用选项之外,SQL Server还有一些自带的功能。
 
在本文中,作者论述了段落还原方案,它对于企业级的数据库非常有用,特别是对于那些只读历史数据被从多少有点操作频繁的当前数据中分离的数据仓库。
 
SQL Server 2005中引入的数据库可用性改善方面最吸引人的特性就是数据库段落还原功能,也就是接下来我要在本文中论述的内容。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录