SQL Server 2008中的稀疏列和列集

2021-09-08 08:23:13 字數 2424 閱讀 8309

這是兩個新增的特性。

關於稀疏列的詳細介紹,請參考

關於列集的詳細介紹,請參考

我的總結如下

1. 稀疏列主要是為了提供對可空字段的更好乙個儲存機制,它可以節省空間(具體說它在真正空值的時候就不佔空間),但也會帶來一些效能方面的影響。所以要有所權衡。

稀疏列主要使用場景:乙個實體有很多屬性列,但很多屬性都可能填不滿。這在以前我們稱為屬性集問題。

稀疏列不是乙個資料型別,它是乙個列的屬性而已。

2. 列集是可以定義所有稀疏列的集合。這是乙個xml資料型別。如果為多個稀疏列定義了乙個列集,那麼針對這些列的修改,就既可以直接修改這些列,也可以通過一次性通過修改列集字段來完成。列集字段其實是乙個計算字段。

下面來看乙個例子

首先,看看如何使用稀疏列。這裡的關鍵在於定義的時候使用sparse關鍵字

use adventureworks

gocreate 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)

goinsert documentstore(docid, title, marketingsurveygroup)

values (2, 'survey 2142', 'men 25 - 35')

go

然後,我們看看如何把列集與稀疏列進行結合使用
use adventureworks;

gocreate 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)

goinsert documentstorewithcolumnset (docid, title, marketingsurveygroup)

values (2, 'survey 2142', 'men 25 - 35')

go

insert documentstorewithcolumnset (docid, title, specialpurposecolumns)

values (3, 'tire spec 2','axw9r411

38')

go

有意思的是,此時如果再以select *的語法查詢該錶的話,那些稀疏列缺省是不會被返回的,而只是返回列集
當然啦,如果還是想返回稀疏列本身的內容,我們可以通過下面的語法
select docid, title, productionspecification, productionlocation 

至於更新,和插入一樣,兩種方式都是可以的,且效果一樣

SqlServer 2008 中Merge的應用

簡介 sqlserver 2008中新增加了merge這個dml關鍵字,msdn對於merge的解釋 根據與源表聯結的結果,對目標表執行insert,update,delete操作.例如 根據目標表與源表的差異,在目標表中執行執行insert,update,delete操作,實現兩個表的同步.語法 ...

Sql Server 2008 中Merge的用法

本文摘自其它 sql server 2008中的merge語句能做很多事情,它的功能是根據源表對目標表執行插入 更新或刪除操作。最典型的應用就是進行兩個表的同步。下面通過乙個簡單示例來演示merge語句的使用方法,假設資料庫中有兩個表product及productnew,我們的任務是將product...

SQL Server 2008中SQL增強功能點

在sql server 2008中新增功能,可以使用單個insert命令插入多行 舉例 create table dbo test2 編號 int null,姓名 varchar 20 null,一季度 int null,二季度 int null,三季度 int null,四季度 int null ...