SQL2008数据库中的稀疏列和列集_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

SQL数据库 2008中的稀疏列和列集[图]

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:数据库NULLTitle
黑客防线网安网讯:  这是两个新增的特性。  我的总结如下  1. 稀疏列主要是为了提供对可空字段的更好一个存储机制,它可以节省空间(具体说它在真正空值的时候就不占空间),但也会带来一些性能方面的影...

  这是两个新增的特性

  我的总结如下

  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 ;

  至于更新,和插入一样,两种方式都是可以的,且效果一样

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-10545-1.html
网站维护教程更新时间:2012-03-21 03:05:43  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer