SQL Server 2008之新版CTP特性大盤點(diǎn)
此文章主要向大家講述的是SQL Server 2008之新版CTP特性,首先,你必須要注意的介入你所安裝的是Microsoft SQL Server 2008 July CTP,在你的機(jī)子上就不能安裝有SQL Server 2000。
與SQL Server 2005的安裝過(guò)程相比,Microsoft SQL Server 2008 July CTP的安裝過(guò)程會(huì)非常的正常。屏幕看上去會(huì)顯的非常簡(jiǎn)單。如果要安裝覆蓋一個(gè)先前的CTP版本,比必須先要卸載先前的版本。The July CTP不會(huì)升級(jí)一個(gè)先前的版本。
在SQL Server 2008中的新的數(shù)據(jù)類型
這個(gè)版本的Microsoft SQL Server 2008包括了一些我們可以開(kāi)發(fā)的新的數(shù)據(jù)類型。這些數(shù)據(jù)類型包括DATE和TIME數(shù)據(jù)類型。Microsoft同時(shí)也包括了HierarchyID系統(tǒng)數(shù)據(jù)類型。
在T-SQL 中DATE和TIME數(shù)據(jù)類型允許按照你的需要僅僅只存儲(chǔ)部分datetime數(shù)據(jù)類型。在Microsoft SQL Server的先前的版本中,存儲(chǔ)和獲取僅僅是日期和時(shí)間需要你同時(shí)存儲(chǔ)日期和時(shí)間值,通過(guò)使用一個(gè)轉(zhuǎn)化函數(shù)來(lái)去除你不需要的部分。DATE系統(tǒng)數(shù)據(jù)類型僅僅存儲(chǔ)日期,并且TIME系統(tǒng)數(shù)據(jù)類型僅僅存儲(chǔ)時(shí)間。使用DATE和TIME系統(tǒng)數(shù)據(jù)類型就像使用datetime系統(tǒng)數(shù)據(jù)類型一樣。
在第一個(gè)例子當(dāng)中,你使用新的數(shù)據(jù)類型申明了你的變量并且簡(jiǎn)單的用getdate()函數(shù)的返回值設(shè)定了變量的值。就像下面顯示的其他的時(shí)間數(shù)據(jù)類型一樣,time數(shù)據(jù)類型支持七位的小數(shù)點(diǎn)位精確。
- DECLARE @Dt as DATE, @Tm as TIME set @Dt = getdate() set @Tm = getdate() select @Dt, @Tm
在第二個(gè)例子中,我們創(chuàng)建了一個(gè)表格,并使用了date數(shù)據(jù)類型創(chuàng)建了一列。接著我們使用getdate()的值設(shè)置了一個(gè)默認(rèn)的限制。當(dāng)我們插入了一條記錄并且查詢了表格之后,我們看到了DateAdded列的值為今天的日期。
- CREATE TABLE dbo.Table_1 ( RecordID int NOT NULL, DateAdded date NULL, DataValue nvarchar(MAX) NULL )>
在我們的第三個(gè)例子中,我們創(chuàng)建了同樣的表格,但是沒(méi)有默認(rèn)的限制。當(dāng)我們?cè)黾佑涗浀臅r(shí)候我們只是簡(jiǎn)單的設(shè)置DateAdded列的值為getdate()系統(tǒng)函數(shù)的值。使用第二個(gè)或者第三個(gè)例子的代碼,輸出結(jié)果將會(huì)是一樣的。
- CREATE TABLE dbo.Table_1 ( RecordID int NOT NULL, DateAdded date NULL, DataValue nvarchar(MAX) NULL )>
Microsoft已經(jīng)加入了一個(gè)第三日期系統(tǒng)數(shù)據(jù)類型。這個(gè)第三系統(tǒng)數(shù)據(jù)類型是datetime2。它就像已經(jīng)使用了很多年的datetime數(shù)據(jù)類型一樣,但是它要更加準(zhǔn)確。當(dāng)datetime數(shù)據(jù)類型精確到千分之一秒的時(shí)候,它被四舍五入到.000, .003 或者.007秒鐘。
datetime2數(shù)據(jù)類型精確到100納秒(七位小數(shù)位)。當(dāng)我們使用datetime2數(shù)據(jù)類型的時(shí)候,你可以通過(guò)使用datetime2(n)選擇要精確到的小數(shù)位,從零到七位。datetime2數(shù)據(jù)類型的值的設(shè)置方法同datetime的設(shè)置方法一致。
- DECLARE @Dt as datetime2 set @Dt = getdate() select @Dt
在這我們顯示了如何控制數(shù)據(jù)類型的精度。
- DECLARE @Dt as datetime2(4) set @Dt = getdate() select @Dt
第四日期系統(tǒng)數(shù)據(jù)類型已經(jīng)被加到了datetimeoffset系統(tǒng)數(shù)據(jù)類型中。這個(gè)數(shù)據(jù)類型在它的輸出中包括了從GMT得來(lái)的時(shí)區(qū)偏移。
- declare @Dt as datetimeoffset(3) set @Dt = '2007-07-12 12:17:23.0 +7:00' select @Dt
HierarchyID系統(tǒng)數(shù)據(jù)類型—伴隨這一些系統(tǒng)方法—被設(shè)計(jì)來(lái)使得存儲(chǔ),查詢,修改更加容易,也使得同層次數(shù)據(jù)一起工作更加容易。這個(gè)新的數(shù)據(jù)類型被最優(yōu)化來(lái)顯示數(shù)據(jù)樹(shù)。HierarchyID數(shù)據(jù)類型支持兩種策略來(lái)進(jìn)行索引存儲(chǔ)。他們叫做深度優(yōu)先遍歷和廣度優(yōu)先遍歷。在深度優(yōu)先遍歷中,在一個(gè)單一樹(shù)中的一些行在索引中被相互之間相互挨著存儲(chǔ)。一個(gè)原始的圖表類型數(shù)據(jù),雇員和經(jīng)理就是一個(gè)典型的例子。在廣度優(yōu)先遍歷中,SQL Server 2008行被相互之間挨著存儲(chǔ)。在雇員/經(jīng)理例子中,向同樣的經(jīng)理匯報(bào)的雇員們被相互之間挨著存儲(chǔ)。
對(duì)于HierarchyID數(shù)據(jù)類型,系統(tǒng)中有一些系統(tǒng)函數(shù)和方法與之相聯(lián)系。有一些像GetLevel(),ParentChildOrg(),DescendantLimit()和GetAncestor()。下面顯示了一個(gè)簡(jiǎn)單的經(jīng)理和雇員之間的父子關(guān)系的例子。
- CREATE TABLE Organization ( NodeLevel hierarchyid, EmployeeID int, OrgLevel as NodeLevel.GetLevel(), EmployeeName nvarchar(50) NOT NULL ) ;
- GO insert into Organization (NodeLevel, EmployeeID, EmployeeName) values (hierarchyid::GetRoot(),0, 'Bob') go Declare
- @Manager hierarchyid SELECT @Manager = hierarchyid::GetRoot() FROM Organization ;
- insert into Organization (NodeLevel, EmployeeId, EmployeeName) values (@Manager.GetDescendant(null, null), 1, 'Joe')
- go Declare @Manager hierarchyid declare @NodeLevel hierarchyid select
- @NodeLevelNodeLevel = NodeLevel from Organization where EmployeeName = 'Joe' SELECT @Manager = max(NodeLevel)
- FROM Organization where NodeLevel.GetAncestor(1) = @NodeLevel insert into Organization (NodeLevel, EmployeeID, EmployeeName)
- values (@NodeLevel.GetDescendant(@Manager, null),2, 'Sarah') go select NodeLevel.ToString()as NodeLevel_String,
- * FROM Organization go drop table Organization go
Select語(yǔ)句的輸出就像下面一樣:
- NodeLevel_StringNodeLevelEmployeeIDOrgLevelEmployeeName /0x00Bob /1/0x5811Joe /1/1/0x5AC022Sarah
表格變量增進(jìn)
當(dāng)表格變量增進(jìn)在SQL Server 2008的先前版本中發(fā)布的時(shí)候,他們又值得被提及了。SQL Server 2008現(xiàn)在支持表格變量作為存儲(chǔ)過(guò)程的輸入?yún)?shù)。這需要在表格變量聲明和存儲(chǔ)過(guò)程聲明中使用一個(gè)用戶自定義的數(shù)據(jù)類型。下面就是一個(gè)基本實(shí)現(xiàn)的例子:
- Create a user-defined data type with a single column. Develop a procedure with a table variable as an input parameter.
- Declare a table variable of the type of the user defined data type.
- Loading 10 records into the table variable and pass the table variable to the stored procedure.
- create type tt_example AS TABLE (spid int) go create procedure usp_example
- @spids tt_example READONLY AS SELECT * FROM @spids GO declare @spids tt_example insert into
- @spids select top 10 spid from sys.sysprocesses exec usp_example @spids=@spids
變到TEXT, NTEXT 和 IMAGE數(shù)據(jù)類型
TEXT, NTEXT 和IMAGE數(shù)據(jù)類型有一些潛在的變化。在SQL Server 2008中,當(dāng)數(shù)據(jù)被寫(xiě)到一個(gè)TEXT, NTEXT或者 IMAGE數(shù)據(jù)類型當(dāng)中時(shí),如果數(shù)據(jù)比8000字節(jié)少時(shí)(對(duì)于NTEXT來(lái)說(shuō)是4000字符,對(duì)于TEXT和 IMAGE是8000)數(shù)據(jù)會(huì)被存儲(chǔ)在行中,如果數(shù)據(jù)長(zhǎng)度比上面提到的限制大的話,數(shù)據(jù)就被存儲(chǔ)在一個(gè)單獨(dú)的數(shù)據(jù)頁(yè)中,這很像Microsoft SQL Server 2005和之前的版本對(duì)于數(shù)據(jù)存儲(chǔ)的方式。當(dāng)數(shù)據(jù)比那些限制大的時(shí)候,就需要一個(gè)數(shù)據(jù)指針,這也和先前的版本一樣。
在SQL Server 2008 July CTP和T-SQL數(shù)據(jù)類型中有很多新的和另人興奮的變化。盡管還有更加新的和改進(jìn)的特性會(huì)在將來(lái)的版本中發(fā)布。
【編輯推薦】