考试辅导

名师推荐

试听名师的课 查看所有名师

数据库:SQLServer2008中的稀疏列和列集 发布时间:2010-06-25 17:32 来源:互联网

  这是两个新增的特性。
  关于稀疏列的详细介绍,请参考 http://msdn.microsoft.com/zh-cn/library/cc280604.aspx
  关于列集的详细介绍,请参考 http://msdn.microsoft.com/zh-cn/library/cc280521.aspx
  我的总结如下
  1. 稀疏列主要是为了提供对可空字段的更好一个存储机制,它可以节省空间(具体说它在真正空值的时候就不占空间),但也会带来一些性能方面的影响。所以要有所权衡。
  稀疏列主要使用场景:一个实体有很多属性列,但很多属性都可能填不满。这在以前我们称为属性集问题。
  稀疏列不是一个数据类型,它是一个列的属性而已。
  2. 列集是可以定义所有稀疏列的集合。这是一个XML数据类型。如果为多个稀疏列定义了一个列集,那么针对这些列的修改,就既可以直接修改这些列,也可以通过一次性通过修改列集字段来完成。列集字段其实是一个计算字段。
  下面来看一个例子
  首先,看看如何使用稀疏列。这里的关键在于定义的时候使用SPARSE关键字
  USE AdventureWorks
  GO
  CREATE TABLE DocumentStore
  (DocID int PRIMARY KEY,
  Title varchar(200) NOT NULL,
  ProductionSpecification varchar(20) SPARSE NULL,
  ProductionLocation smallint SPARSE NULL,
  MarketingSurveyGroup varchar(20) SPARSE NULL ) ;
  GO
  --插入数据是一模一样的
  INSERT DocumentStore(DocID, Title, ProductionSpecification, ProductionLocation)
  VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
  GO
  INSERT DocumentStore(DocID, Title, MarketingSurveyGroup)
  VALUES (2, 'Survey 2142', 'Men 25 - 35')
  GO然后,我们看看如何把列集与稀疏列进行结合使用
  USE AdventureWorks;
  GO
  CREATE TABLE DocumentStoreWithColumnSet
  (DocID int PRIMARY KEY,
  Title varchar(200) NOT NULL,
  ProductionSpecification varchar(20) SPARSE NULL,
  ProductionLocation smallint SPARSE NULL,
  MarketingSurveyGroup varchar(20) SPARSE NULL,
  MarketingProgramID int SPARSE NULL,
  SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);--目前这里只是支持ALL_SPARSE_COLUMNS这个关键字,也就是说所有的稀疏列
  GO
  --使用列集之后,既可以直接使用列集插入数据,也可以使用稀疏列本身插入数据
  INSERT DocumentStoreWithColumnSet (DocID, Title, ProductionSpecification, ProductionLocation)
  VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
  GO
  INSERT DocumentStoreWithColumnSet (DocID, Title, MarketingSurveyGroup)
  VALUES (2, 'Survey 2142', 'Men 25 - 35')
  GO
  INSERT DocumentStoreWithColumnSet (DocID, Title, SpecialPurposeColumns)
  VALUES  (3, 'Tire Spec 2',  '<ProductionSpecification>AXW9R411</ProductionSpecification><ProductionLocation>38</ProductionLocation>')
  GO有意思的是,此时如果再以SELECT *的语法查询该表的话,那些稀疏列默认是不会被返回的,而只是返回列集
  当然啦,如果还是想返回稀疏列本身的内容,我们可以通过下面的语法
  SELECT  DocID, Title, ProductionSpecification, ProductionLocation FROM  DocumentStoreWithColumnSet WHERE ProductionSpecification IS NOT NULL ;

第一考试网友情提示:如果您遇到任何疑问,请登录第一考试网考试辅导频道或添加qq:,第一考试网以“为考友服务”为宗旨,秉承“快乐学习,轻松考试!”的理念,旨在为广大考友打造一个良好、温馨的学习与交流平台,欢迎持续关注。以上是小编为大家推荐的《数据库:SQLServer2008中的稀疏列和列集》相关信息。

编辑推荐

计算机等级考试辅导:SQL中JOB的运行状态

计算机等级考试辅导:SQLSERVER2005的引用

三级:把数据导入不同的表空间

2009年三级信息管理技术辅导:战略数据规划

教你三种方法卸载Windows7SP1Beta