SQL Server 2008的新版的CTP的獨(dú)特之處
本文主要向你介紹的是SQL Server 2008的新版的CTP的獨(dú)特之處,在安裝Microsoft SQL Server 2008 July CTP之時,在你的機(jī)子上就不能裝有SQL Server 2000。與SQL Server 2005的安裝過程相比,Microsoft SQL Server 2008 July CTP的安裝過程會非常的正常。
屏幕看上去會顯的非常簡單。如果要安裝覆蓋一個先前的CTP版本,比必須先要卸載先前的版本。The July CTP不會升級一個先前的版本。
在SQL Server 2008中的新的數(shù)據(jù)類型
這個版本的Microsoft SQL Server 2008包括了一些我們可以開發(fā)的新的數(shù)據(jù)類型。這些數(shù)據(jù)類型包括DATE和TIME數(shù)據(jù)類型。Microsoft同時也包括了HierarchyID系統(tǒng)數(shù)據(jù)類型。
在T-SQL 中DATE和TIME數(shù)據(jù)類型允許按照你的需要僅僅只存儲部分datetime數(shù)據(jù)類型。在Microsoft SQL Server的先前的版本中,存儲和獲取僅僅是日期和時間需要你同時存儲日期和時間值,通過使用一個轉(zhuǎn)化函數(shù)來去除你不需要的部分。DATE系統(tǒng)數(shù)據(jù)類型僅僅存儲日期,并且TIME系統(tǒng)數(shù)據(jù)類型僅僅存儲時間。使用DATE和TIME系統(tǒng)數(shù)據(jù)類型就像使用datetime系統(tǒng)數(shù)據(jù)類型一樣。
在第一個例子當(dāng)中,你使用新的數(shù)據(jù)類型申明了你的變量并且簡單的用getdate()函數(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
在第二個例子中,我們創(chuàng)建了一個表格,并使用了date數(shù)據(jù)類型創(chuàng)建了一列。接著我們使用getdate()的值設(shè)置了一個默認(rèn)的限制。當(dāng)我們插入了一條記錄并且查詢了表格之后,我們看到了DateAdded列的值為今天的日期。
- CREATE TABLE dbo.Table_1 ( RecordID int NOT NULL, DateAdded date NULL, DataValue nvarchar(MAX) NULL )>
在我們的第三個例子中,我們創(chuàng)建了同樣的表格,但是沒有默認(rèn)的限制。當(dāng)我們增加記錄的時候我們只是簡單的設(shè)置DateAdded列的值為getdate()系統(tǒng)函數(shù)的值。使用第二個或者第三個例子的代碼,輸出結(jié)果將會是一樣的。
- CREATE TABLE dbo.Table_1 ( RecordID int NOT NULL, DateAdded date NULL, DataValue nvarchar(MAX) NULL )>
Microsoft已經(jīng)加入了一個第三日期系統(tǒng)數(shù)據(jù)類型。這個第三系統(tǒng)數(shù)據(jù)類型是datetime2。它就像已經(jīng)使用了很多年的datetime數(shù)據(jù)類型一樣,但是它要更加準(zhǔn)確。當(dāng)datetime數(shù)據(jù)類型精確到千分之一秒的時候,它被四舍五入到.000, .003 或者.007秒鐘。datetime2數(shù)據(jù)類型精確到100納秒(七位小數(shù)位)。當(dāng)我們使用datetime2數(shù)據(jù)類型的時候,你可以通過使用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ù)類型中。這個SQL Server 2008數(shù)據(jù)類型在它的輸出中包括了從GMT得來的時區(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è)計來使得存儲,查詢,修改更加容易,也使得同層次數(shù)據(jù)一起工作更加容易。這個新的數(shù)據(jù)類型被最優(yōu)化來顯示數(shù)據(jù)樹。HierarchyID數(shù)據(jù)類型支持兩種策略來進(jìn)行索引存儲。
他們叫做深度優(yōu)先遍歷和廣度優(yōu)先遍歷。在深度優(yōu)先遍歷中,在一個單一樹中的一些行在索引中被相互之間相互挨著存儲。一個原始的圖表類型數(shù)據(jù),雇員和經(jīng)理就是一個典型的例子。在廣度優(yōu)先遍歷中,行被相互之間挨著存儲。在雇員/經(jīng)理例子中,向同樣的經(jīng)理匯報的雇員們被相互之間挨著存儲。
對于HierarchyID數(shù)據(jù)類型,系統(tǒng)中有一些系統(tǒng)函數(shù)和方法與之相聯(lián)系。有一些像GetLevel(),ParentChildOrg(),DescendantLimit()和GetAncestor()。下面顯示了一個簡單的經(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語句的輸出就像下面一樣:
- NodeLevel_StringNodeLevelEmployeeIDOrgLevelEmployeeName /0x00Bob /1/0x5811Joe /1/1/0x5AC022Sarah
表格變量增進(jìn)
當(dāng)表格變量增進(jìn)在SQL Server 2008的先前版本中發(fā)布的時候,他們又值得被提及了。SQL Server 2008現(xiàn)在支持表格變量作為存儲過程的輸入?yún)?shù)。這需要在表格變量聲明和存儲過程聲明中使用一個用戶自定義的數(shù)據(jù)類型。下面就是一個基本實(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ù)被寫到一個TEXT, NTEXT或者 IMAGE數(shù)據(jù)類型當(dāng)中時,如果數(shù)據(jù)比8000字節(jié)少時(對于NTEXT來說是4000字符,對于TEXT和 IMAGE是8000)數(shù)據(jù)會被存儲在行中,如果數(shù)據(jù)長度比上面提到的限制大的話,數(shù)據(jù)就被存儲在一個單獨(dú)的數(shù)據(jù)頁中,這很像Microsoft SQL Server 2005和之前的版本對于數(shù)據(jù)存儲的方式。當(dāng)數(shù)據(jù)比那些限制大的時候,就需要一個數(shù)據(jù)指針,這也和先前的版本一樣。
在SQL Server 2008 July CTP和T-SQL數(shù)據(jù)類型中有很多新的和另人興奮的變化。盡管還有更加新的和改進(jìn)的特性會在將來的版本中發(fā)布。
【編輯推薦】
- SQL Server索引的正確使用標(biāo)準(zhǔn)是啥樣?
- SQL Server索引選擇的引用與建議
- SQL Server評價索引之有效性
- SQL Server索引直方圖的內(nèi)容描述
- 關(guān)于SQL Server索引密度的知識