【SQL Server2008新增功能小結】

feixianxxx發表於2010-05-12

/*----------------------------------------------------------------

-- Author  :feixianxxx(poofly)

-- Date    :2010-05-12 19:43:03

-- Version:

--      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) 

Mar 29 2009 10:27:29 

Copyright (c) 1988-2008 Microsoft Corporation

Enterprise Evaluation Edition on Windows NT 6.1 <X86> (Build 7600: )

-- Content:SQL Server2008新增功能小結

-- 參考SQL Server2008資料庫系統開發(貫通)

----------------------------------------------------------------*/

--由於沒用過或者不熟悉,有些內容一筆帶過,只對掌握的東西進行舉例說明

 

1.安全方面

1.1加密
一個是透明資料加密http://topic.csdn.net/u/20100511/17/e370e88f-764a-4d00-b781-75b584f1996e.html; 另外一個是備份加密

1.2審計
除了登入/登出和許可權更改外,還增加了允許監控資料的更改或訪問。

 

 

2.管理方面

2.1資料壓縮:主要目標使實際的表的尺寸減小。


2.2資源管理器:書上提到了一個Performance Studio,它是一個效能工具的集合。


2.3管理非結構化資料

 

 

3.開發方面

3.1批量資料的一次性插入(values)+內連線多條資料
create table test_1

(

id int

)

insert test_1 values(1),(2),(3)

 

select *

from (values(1,2),(3,4)) k (a,b)

join (values(1,3),(4,5)) z (a,b) 

on k.a=z.a

/*

a           b           a           b

----------- ----------- ----------- -----------

1           2           1           3*/

 

3.2變數一次性定義賦值+累計運算子
declare @n int=1,@n2 int =2

select @n,@n2

 

declare @N int

set @N=2

set  @N*=2

print @N

/*

4*/

 

 

 

3.3forceseek
create table test_2

(id int unique ,value int )

create index l on test_2(value)

insert test_2 values(1,2),(2,2),(3,2),(4,3),(5,4)

go

select  * from test_2 where id in(1,3,5)

--表掃描

select * from test_2 with(forceseek) where id in(1,3,5)

 

--這裡會強制使用索引


3.4GROUPING SETS
詳細看:http://msdn.microsoft.com/zh-cn/library/bb510427.aspx
SELECT customer, year, SUM(sales)

FROM T

GROUP BY GROUPING SETS ((customer), (year))

等價於

SELECT customer, NULL as year, SUM(sales)

FROM T 

GROUP BY customer

UNION ALL

SELECT NULL as customer, year, SUM(sales)

FROM T 

GROUP BY year

 

3.5新的自定義引數 表資料型別
create type tbType as TABLE 

(

id int

);

--它還可以用做引數,建立儲存過程

create proc spNewType

@tT tbType readonly

as

select * 

into # from @tT

select * from #

go

declare @tT  tbType

insert @tT select 1 union select 2 union select 3

--執行儲存過程

exec spNewType @tT

/*

id

-----------

1

2

3*/

3.6 MERGE 語句
參考 http://blog.csdn.net/feixianxxx/archive/2010/02/07/5296519.aspx

 


4.新的資料型別

4.1時間資料型別
declare @time date=getdate(),@time2 time=getdate(),@time3 datetime2=getdate(),@time4 datetimeoffset(3)=getdate()

select GETDATE()--2010-05-12 20:26:02.397

select @time--2010-05-12

select @time2--20:26:02.3970000

select @time3--2010-05-12 20:26:02.39 (精確到ns,位小數位,保留位)

select @time4--2010-05-12 20:26:02.397 +00:00(包括GMT得來的時區偏移)

 

4.2“樹”型別
HierarchyID是一個系統資料型別,被最優化來顯示資料樹
關於這個型別的用法 參考http://social.msdn.microsoft.com/Search/zh-cn?query=HierarchyID
書上的一個例子:
create table test_3

(

NodeLevel hierarchyid,

EmployeeID int,

OrgLevel AS NodeLevel.GetLevel(),

    EmployeeName varchar(100)

)

go

insert test_3(NodeLevel,EmployeeID,EmployeeName)

values(hierarchyid::GetRoot(),0,'poofly')

go

declare @manager hierarchyid

select @manager=hierarchyid::GetRoot() from test_3

insert test_3 (NodeLevel,EmployeeID,EmployeeName)

values(@manager.GetDescendant(null,null),1,'lo')

go

declare @manager hierarchyid,@NodeLevel hierarchyid

select @NodeLevel=NodeLevel from test_3 where EmployeeName='lo'

select @manager=MAX(NodeLevel) from test_3 where NodeLevel.GetAncestor(1)=@NodeLevel

insert test_3

values(@NodeLevel.GetDescendant(@manager,null),2,'sear')

go

select NodeLevel.ToString() as string  from test_3

go

/*

/

/1/

/1/1/

*/

 

4.3 FILESTREAM

關於FILESTREAM的介紹請看http://msdn.microsoft.com/zh-cn/library/bb933993.aspx

我來簡單應用一下這個FILESTREAM

 

--第一步:啟用FILESTREAM

在安裝或升級 SQL Server 時,並不會自動啟用 FILESTREAM。您必須使用 SQL Server 配置管理器和 SQL Server Management Studio 來啟用 FILESTREAM

開啟SQL Server 配置管理器,在服務上右擊屬性,具體參看 http://msdn.microsoft.com/zh-cn/library/cc645923.aspx

開啟SQL Server Management Studio 在例項上右擊選擇屬性,選高階選項卡,在檔案流訪問級別上將狀態從已禁用改成已啟用完全訪問,重啟服務

--第二步:新增檔案流檔案組和檔案

選擇你要操作的資料庫,右擊屬性,先選擇檔案組,在檔案流檔案組下新增檔案組,任意取名 filestreamGroup 

然後選擇檔案選項卡,新增一個檔案filestream,檔案型別選中檔案流,在後面的路徑上選擇一個路徑 E:/,點選確定

你可以在E盤下看到一個FILESTREAM的資料夾,裡面就儲存了你的FILESTREAM資料

ps:注意再次連上服務,剛斷開過

--建立還有FileStream的表

CREATE TABLE test

(

id uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(), 

col2 int, 

fileCol varbinary(max) FILESTREAM

)

--插入資料

INSERT test VALUES(NEWID(),1,cast('Iam using FileStream!' as varbinary(max)))

--進入你的E盤下的FILESTREAM檔案下檢視多出來的資料夾,點選進入後用記事本開啟,你會看到剛剛插入的記錄了。

--更新記錄

UPDATE test

SET fileCol=cast(' new I am using FileStream!' as varbinary(max))

where col2=1

--再次進入你的E盤下的FILESTREAM檔案下檢視多出來的資料夾,你會發現再次多出一個檔案,原來的那個並沒有刪除

--這說明系統是不會刪除更新前的檔案流資料。

--刪除記錄

delete test where col2=1

--再次進入你的E盤下的FILESTREAM檔案下檢視多出來的資料夾,你會發現還是原來的個檔案,原來的那個並沒有刪除

--這說明系統無論做什麼操作,都會記錄下FileStream的記錄,就跟LOG 記錄一樣。

 

 

 

 

 

當然還有安裝、系統效能方面、報表服務新增加的功能、伺服器合併解決方案、與office2007的結合、SSIS的功能新增強、ssas的改進和增強等。

 


 

 

 

相關文章