*
   原稿 (英文)

適用於資料庫開發人員的 SQL Server 2005 概觀

作者:Matt Nunn
Microsoft Corporation

2004 年 9 月

適用於:
Microsoft SQL Server 2005
SQL Server 資料庫開發
Microsoft .NET Framework
Microsoft Visual Studio 2005
Microsoft ADO.NET 2.0

摘要:本文提供 Microsoft SQL Server 2005 中用於資料庫開發的新功能概觀。

(列印共 14 頁)

目錄

資料庫開發人員的新典範
.NET Framework 整合
XML 技術
新應用程式架構
語言增強
結論

資料庫開發人員的新典範

隨著 Microsoft SQL Server 2005 Beta 2 的問世,資料庫開發的世界也繼之產生變化。身為開發人員,您現在有機會可以根據功能的需求適切找出程式碼、存取資料的原生格式 (例如 XML),以及建置由資料庫伺服器的功能所驅使的複雜系統。資料庫開發變得比以往更加整合,而您所需的所有工具全都唾手可得。

本白皮書將探討 SQL Server 2005 中一些能讓您建置新等級資料庫應用程式的新功能。

.NET Framework 整合

隨著 Microsoft SQL Server 2005 Beta 2 的發行,資料庫程式設計師現在可以善加利用 Microsoft .NET Framework 類別庫及現代程式設計語言,在伺服器內實作功能性。運用 Common Language Runtime (CLR) 整合,您可以任選一種 .NET Framework 程式語言來編寫預存程序、函式和觸發程序。Microsoft Visual Basic .NET 和 C# 程式語言都有提供物件導向的建構函式、結構化例外處理、陣列、命名空間和類別。此外,.NET Framework 還提供上千種具備廣泛內建功能、並且可讓您輕鬆在伺服器端使用的類別和方法。許多在 Transact-SQL 中棘手或是難以執行的工作,都可使用 Managed 程式碼更順利地完成;另外還提供兩種全新的資料庫物件 — 彙總 (Aggregate) 和使用者定義的型別。您現在更能善用從撰寫同處理序 (In-Process) 程式碼所獲取的知識和技能。簡而言之,SQL Server 2005 Beta 2 可讓您擴充資料庫伺服器,進而在後端更輕鬆地執行適當的運算和操作。

SQL Server 和 CLR 之間的整合提供幾項重大的優勢:

  • 增強的程式設計模型: 與 .NET Framework 相容的程式語言在許多方面都比 Transact-SQL 還要豐富,並為 SQL 開發人員提供過去所沒有的建構函式和功能。
  • 提升的可靠性和安全性: Managed 程式碼是在 CLR 環境中執行,而且是由資料庫引擎所主控。這讓 .NET Framework 資料庫物件比 SQL Server 早期版本所提供的擴充預存程序更加可靠且安全。
  • 使用者定義的型別和彙總: 兩種全新的資料庫物件,擴展了 SQL Server 藉由裝載 CLR 而具備的儲存和查詢能力。
  • 通用開發環境: 資料庫開發已整合至 Microsoft Visual Studio 2005 的開發環境中。您可採用與撰寫中介層或用戶端層的 .NET Framework 元件和服務時所使用的相同工具,來開發和偵測資料庫物件和指令碼。
  • 效能和延展性: 由於 Managed 程式碼在執行之前會先編譯成機器碼,因此您可以在某些情況下達到大幅的效能提升。

您可以藉由使用 Visual Basic .NET 和 C# 程式語言,來運用 CLR 整合撰寫邏輯較為複雜而且比較適合處理運算工作的程式碼。除此之外,Visual Basic .NET 和 C# 還提供物件導向的能力,如封裝、繼承和多型 (Polymorphism)。您現在可以輕易將相關的程式碼有系統地利用各種類別和命名空間來歸類,這表示您在處理大量程式碼時,可以更輕鬆地組織和維護您撰寫的程式碼。這項依邏輯和實體的方式將程式碼組織成組件和命名空間的能力是一大優勢,而且將更方便您在大型資料庫實作下找出各個不同的程式碼片段,並建立彼此的關聯。

Managed 程式碼在處理數字和管理複雜的執行邏輯方面都比 Transact-SQL 有效率很多,而且還具備對字串處理、規則運算式等等的廣泛支援。此外,加上 .NET Framework 類別庫中所提供的功能,您現在更能輕鬆地從任何預存程序、觸發程序或使用者定義的函式,完整存取上千種預建的類別和常式。所有從改進的字串處理功能、數學函數、日期操作、存取系統資源、進階的加密演算法、檔案存取、影像處理和 XML 資料操作而來的一切,都可以輕易地從 Managed 預存程序、函式、觸發程序和彙總存取。

Managed 程式碼其中一項主要的優點是型別安全 (Type Safety)。在執行 Managed 程式碼之前,CLR 會執行幾項檢查,透過所謂的「驗證」,來確保程式碼能夠安全地執行。例如,程式碼會經過檢查以確保未讀取的記憶體不會被寫入。

在 Transact-SQL 和 Managed 程式碼之間作選擇

當撰寫預存程序、觸發程序和使用者定義的函式時,現在您需要作出的一項決定就是要使用傳統的 Transact-SQL 還是一種與 .NET Framework 相容的程式語言,例如 Visual Basic .NET 或 C#。這個問題的答案將視所牽涉的個別情況而定;在部份情況下,您會想要使用 Transact-SQL,而在其他情況下,您會想要使用 Managed 程式碼。

Transact-SQL 最適合用於只需要一點點或不需要任何程序的邏輯,程式碼基本上就可執行資料存取的情況。與 .NET Framework 相容的程式語言最適合用於著重運算具有複雜邏輯的函式和程序,或是會利用 .NET Framework 類別庫的情況。

程式碼的配置也很重要。Transact-SQL 和 Managed 程式碼都是在伺服器上執行。這將功能性和資料緊密地放在一起,並允許您利用伺服器的處理威力。這樣的好處在於它會減少資料和中介層之間的流量。藉著在資料旁直接執行運算,I/O 繫結的系統可能會覺得這種方法相當有利。CLR 函式也可以利用 SQL Server 查詢處理器,將執行過程平行化和最佳化。在另一方面,您應該也希望避免將耗用處理器的工作放到資料庫伺服器上。目前大多數的用戶端電腦都能處理大量的工作,而您可能希望盡量在用戶端上放置較多的程式碼來利用這項處理威力。但並沒有所謂「一體適用」的答案。

Web 服務

在 SQL Server 2005 中,您可以在資料庫層開發 XML Web Services,讓 SQL Server 成為一個 HTTP 接聽項。這為以 Web 服務為中心的應用程式提供了一種全新的資料存取能力。在 SQL Server 2005 Beta 2 中,您可以使用 HTTP 直接存取 SQL Server,而不需要使用像是 Microsoft Internet Information Services (IIS) 的中介層接聽項。SQL Server 會公開一種 Web 服務介面來執行 SQL 陳述式及函數和程序的引動過程。查詢結果會以 XML 格式傳回,並且可運用 Visual Studio 的 Web 服務基礎結構。

ADO.NET

在下一版的 ADO.NET 中有許多新功能。從對查詢變更通知的全新支援,到「多重作用結果集 ( Multiple Active Result Sets,MARS)」,ADO.NET 使資料集的存取和操作更加進化,達成了更高的延展性和彈性。

ADO.NET 通知支援

SQL Server 2005 Beta 2 引進了對 SQL Server 查詢的通知支援。您可以利用這項支援傳送命令到 SQL Server,並要求,在相同的命令再次執行時若所產生與最初取得不同的結果,即產生通知。您可以使用依存性物件來偵測基礎資料的變更而完成這個動作。透過任何用戶端 API,例如 ADO.NET、OLE DB、開放式資料庫連接 (Open Database Connectivity,ODBC)、Microsoft AciveX Data Objects (ADO) 或 SOAP,傳送到用戶端的命令可能會包含一個標記來要求通知。針對每個將要求作為其中一部份來執行的陳述式,伺服器都會為每個包含在要求中的陳述式建立一個引發一次的「通知訂閱」。通知是透過一個應用程式可輪詢的 SQL Service Broker 佇列來傳遞,並且使用啟動服務或封鎖陳述式隨時傳回每個通知。查詢通知對於啟用應用程式中的結果快取相當有用,例如資料庫驅動的網站。

多重作用結果集

多重作用結果集 (MARS) 提供可在每一連線具有一個以上擱置要求的能力,特別是在每一連線裡開啟一個以上的預設結果集。預設結果集是順向 (Foward-Only)、唯讀的結果集。對於預設結果集,用戶端驅動程式會直接大量 (以表格式資料流緩衝區大小的區塊) 擷取資料,讓應用程式要求不需要往返伺服器 (如同在伺服器游標的案例) 就可以完成。應用程式可利用簡單的一次執行一列的程式撰寫模型,而不會損及效能。

多重作用結果集功能移除了目前對開放預設結果集封鎖驅動程式傳送要求給伺服器直到整個結果集都耗盡的限制。

快照集隔離支援

SQL Server 2005 Beta 2 引進了新的快照集隔離層級。快照集隔離是一種針對資料讀取器儲存的資料版本的資料列版本控制機制。此種新的隔離層級提供如下優點:

  • 提高唯讀應用程式的資料可用性。在 OLTP 環境中允許非封鎖的讀取作業。
  • 自動化寫入交易的強制衝突偵測。
  • 簡化從 Oracle 到 SQL Server 的應用程式遷移

例如,鎖定會導致同時讀取和寫入相同資料的應用程式之間的封鎖。如果某交易變更某資料列,則其他交易要等到寫入認可後才能讀取該資料列。透過快照集隔離,讀取器可存取資料列前一個認可的值。

快照集隔離層級是經由 ADO、OLE DB、SQL OLEDB、Shape Provider、SQL ODBC、OLE DB Managed Provider 和 SQL Managed Provider 支援以及公開。

SQL 管理物件

SQL 管理物件 (SQL Management Objects,SMO) 模型是針對 SQL Server 2005 的管理物件模型。SMO 在 SQL Server 管理物件模型的設計和架構上呈現了顯著的改進。它使用方便,卻是個以 .NET Managed 程式碼為基礎的豐富物件模型。SMO 是使用 .NET Framework 來開發資料庫管理應用程式的主要工具。SMO 用於 SQL Server Management Studio 中的每個對話方塊,而且能在 SQL Server Management Studio 中執行的每個系統管理動作也都能使用 SMO 來完成。

全新的 SMO 物件模型和 Microsoft Windows Management Instrumentation (WMI) API 取代了 SQL-DMO。SMO 在可能的情況下,會加入類似 SQL-DMO 的物件以方便使用。您仍然可以搭配使用 SQL Server 2005 Beta 2 和 SQL-DMO,但 SQL-DMO 並不會再被更新來管理專屬於 SQL Server 2005 的功能。

SMO 和 SQL-DMO

SMO 物件模型是 SQL-DMO 中完成工作的邏輯性接續。SMO 與 SQL-DMO 的功能相容,並包含許多相同的物件。在可能的情況下,會遵行原始的 SQL-DMO 設計,但 SMO 有許多 SQL-DMO 以外的額外功能。為了使 SQL Server 2005 能完全發揮資料定義語言 (DLL) 和管理涵蓋範圍,SMO 新增了 150 種以上的新類別。

SMO 的主要優勢在於它的效能表現和延展性。SMO 擁有一種快取物件模型,可在物件對 SQL Server 的變更產生影響之前,讓您改變其中的數個屬性。這樣可使 SMO 減少往返伺服器的次數,並讓它的物件更具彈性。SMO 另外還將具現化進行最佳化,表示您可以部份或完整地個體化物件。您可以不個體化物件的所有屬性,以便快速載入許多物件。

不像 SQL-DMO 只有一個應用程式根目錄保存對所有建立的伺服器物件的參照,SMO 反而能讓您不需要設立新連線,就可針對伺服器建立多個根目錄。SMO 除了支援 SQL-DMO 樣式指令碼外,還實作進階的多階段指令碼處理。您也可以將物件切換成擷取模式,並擷取為該物件所發出的任何 DLL,而不需要實際將變更套用到伺服器。

SQL-DMO 同樣也有一個 Managed Computer 物件,可簡化 WMI 的介面以支援透過 SMO 物件介面進行 WMI 監視和伺服器設定。

XML 技術

XML 已儼然成為一種儲存和傳輸資料的通用格式,而且是標記、結構化和半結構化資訊的熱門選擇。這類資料的範例包括有文字 (進行標記以識別文件結構和重點)、巢狀物件 (結構化),以及可能在不同的執行個體中改變其結構的異質資料 (半結構化)。XML 還是一項重要且廣為接受的標準,用在不同應用程式之間經由區域網路和網際網路傳播資料。

Microsoft SQL Server 2000 支援透過 Microsoft SQLXML 使用 XML,這可讓您將關聯性資料轉換成 XML 格式,並將 XML 資料存在關聯式資料表中。Microsoft SQL Server 2005 Beta 2 則建置在這項功能性的基礎之上,支援 XML 作為首要資料型別,並為 XML 文件提供全新的查詢語言,以及讓您執行就地修改。

為了進一步支援使用 XML 資料的使用者的需要,引入了一種全新的 XML 資料型別。此資料型別具有 — query()exist()value()nodes()modify() 方法 — 這實作了 XML Query (XQuery) 規格的重要子集,且目前即將成為標準。事實上,此項規格在 SQL Server 2005 Beta 2 中已加上 XML 資料修改建構加以擴充。為了支援 XML 型別,已加入關鍵字以登錄和管理 XML 結構描述。FOR XML 和 OPENXML 也有所變更,這兩種功能是在 SQL Server 2000 介紹用來從關聯性資料產生 XML,或從 XML 產生關聯性資料。這些功能現在都藉著 XML 資料型別的支援而獲得加強。

XML 資料型別

XML 可製作複雜資料的模型,而不受限於 SQL Server 所支援的數值類型別。因此,像是 charvarchar 等以字串為基礎的內建資料型別,並不足以完整並有效地利用 XML 無數的優勢和威力。例如,如果將 XML 存成字串,您可以插入或選取整個文件,或甚至從中擷取相鄰的位元組,但卻無法查詢文件本身的內容。透過提供 XML 資料型別,SQL Server 2005 可讓您查詢部份 XML 文件、驗證該文件與 XML 結構描述相符,甚至就地修改 XML 文件的內容。它還以在 SQL Server 2000 完全不可能做到的方式將傳統、關聯性資料與未結構化或半結構化 XML 文件中的資料相整合。在 SQL Server 2005 中,XML 資料是存成二進位大型物件 (BLOB),用一種允許有效重新剖析和部份壓縮的內部表示。

XML 結構描述的集合可與型別 XML 的資料行相關聯。這提供在預存的 XML 資料內之條件約束、插入和更新,以及數值型別的驗證,並提供儲存和查詢處理的最佳化 SQL Server 2005 也提供數種 DDL 陳述式,用以管理伺服器上的結構描述。

擷取和寫入 XML

SQL Server 2005 Beta 2 另外還包括幾項在 SQL Server 2000 中首次介紹的 FOR XML 和 OPENXML 功能方面的增強。

FOR XML

SQL Server 2000 中的 FOR XML 子句並不提供方法來取用伺服器上的 XML 結果。您無法將 XML 結果存到資料表中 (當然,如果沒有先將它們傳回用戶端的話) 或將它們指定給變數。SQL Server 2005 Beta 2 增加了對 XML 資料型別的支援,並允許在伺服器上取用 XML,以此強化了 FOR XML。它是經由在 FOR XML 中加入 TYPE 指示詞而達成。例如,SELECT...FOR XML TYPE 陳述式的結果會產生一個 XML 資料型別執行個體,可指派到本機 XML 變數或用在後續的 INSERT 陳述式以填入 XML 資料型別資料行。PATH 模式會指定在 XML 樹狀結構中資料行值應該出現的路徑。包含在 FOR XML 中的 TYPE 參數和 PATH 參數可簡化複雜 XML 的產生,而且比 FOR XML EXPLICIT 查詢更方便使用。FOR XML 在 SQL Server 2005 Beta 2 中也可用在 XML 資料型別資料行上。

OPENXML

SQL Server 2000 在本質上把 OPENXML rowset 函數視作為 FOR XML 子句的反函數。也就是說,使用 FOR XML 可擷取如 XML 的關聯性資料;而使用 OPENXML,可將 XML 轉換回關聯性資料,與設立 SQL 聯結或執行查詢相反。SQL Server 2005 Beta 2 強化了 OPENXML 的功能性。除了 XML 資料型別外,還提供對數種新資料型別的支援,例如使用者定義的型別 (UDT)。您可以將這些用在 OPENXML WITH 子句中,而且可以將 XML 資料型別執行個體傳給 sp_preparedocument

XQuery 支援

XML 查詢語言 (XML Query Language),或稱為 XQuery,是針對查詢 XML 資料所有型別且經過最佳化的一種智慧且強大的語言。透過 XQuery,您可以使用 XML 資料型別資料行相關聯的方法,針對其變數和資料行執行查詢。就跟許多 XML 標準一樣,XQuery 的發展是由全球資訊網協會 (W3C) 所監督。XQuery 是從一種稱作 Quilt 的查詢語言發展而來,該語言本身是以各種其他查詢語言,像是 XML 路徑語言 (XML Path Language,XPath) 1.0 版、XQL 和 SQL 等為基礎。它也包含 XPath 2.0 版作為子集。因此,如果您曾經使用過 XPath 1.0,便可運用您現有的技能而無須學習一套完全陌生的查詢語言。其實明顯的增強之處不止 XPath,還包括型別化、特殊函數,以及對更完善的反覆運算、結果排序和建構函式等的支援。

SQL Server 2005 Beta 2 隨附深入的 XQuery 功能,允許 XML 物件在資料層操作。它支援在 2003 年 11 月 15 日發行的 XQuery 1.0 Working Drafts 中的靜態型別化子集。

DML 擴充

XQuery 規格目前包含的語法和語意是用於查詢,而不是用於修改 XML 文件。XML 資料修改語言 (XML Data Modification Language,DML) 是 XQuery 資料修改功能的擴充。SQL Server 2005 Beta 2 新增了三個關鍵字:insertupdatedelete。而每一個都是用在 XML 資料型別中的 modify() 方法。

新應用程式架構

SQL Server 2005 介紹了一套全新的 SQL Server 應用程式架構,稱為 Service Broker。Service Broker 是一套分散式應用程式架構,提供資料庫對資料庫層級可靠的非同步訊息服務。

SQL Service Broker

在過去 10 年以來,電子商務應用程式的激增創造了資料庫應用程式間更高的工作流程管理需要。當線上客戶下訂單購買書籍時,此訂單需要將交易送經庫存、送貨、信用卡系統進行認可,另外還需要使用另一個 Web 應用程式來傳送訂單確認。等候每個程序依序發生並無法進行妥善調整。SQL Server 2005 提供一套全新可調整的架構來建立非同步的訊息路由。

Service Broker 技術允許內外部處理序使用標準 Transact-SQL 資料庫操作語言的擴充來傳送和接收可靠的非同步訊息。這些訊息會送到與傳送者相同資料庫中的佇列、送到相同 SQL Server 執行個體的其他資料庫,或送到在相同伺服器或遠端伺服器上的其他 SQL Server 執行個體。

Reporting Services

隨著 SQL Server 2005 的誕生,Microsoft 擴充了其整合式商業智慧 (BI) 平台的一個主要新元件。SQL Server Reporting Services 藉著方便在各種商業環境將適當的資訊傳達給適當的人,而擴展了 Microsoft 商業智慧願景。

Reporting Services 是一套全面化、伺服器架構的平台,用於建立、管理和傳遞傳統和互動的報告。它包含您建立、散佈和管理報告現成所需的一切。同時,Routing Service 的模組化設計和廣大的應用程式設計介面 (API) 讓軟體開發人員、資料提供者和企業得以將報告功能與傳統系統或協力廠商應用程式相整合。

Reporting Services 隨附在 SQL Server 2005 中,並包括:

  • 一套完整的工具,用以建立、管理和檢視報告。
  • 一個用以主控和處理報告的引擎。
  • 一個可延展的架構和開放介面,用於各種 IT 環境中嵌入報告或整合解決方案。

Notification Services

Microsoft SQL Server Notification Services 是一種用來開發和部署產生和傳送通知給使用者的應用程式的平台。通知是可適時傳給各式各樣的裝置的個人化訊息。

通知反映了訂閱者的喜好設定。訂閱者輸入一項訂閱來表達對某項資訊的興趣。例如,「當 Adventure Works 的股價達 $70.00 時通知我」,或「當敝組正在編寫的策略文件更新時通知我」。

通知可以在觸發事件發生的同時馬上產生並傳給使用者,也可以根據使用者預先決定的排程產生並送出。使用者的訂閱會指定應該何時產生並傳送通知。

通知也可傳給各種不同的裝置。例如,可將通知傳到使用者的行動電話、個人數位助理 (PDA)、Microsoft Windows Messenger,或是電子郵件帳號。由於這些裝置經常伴隨使用者,因此通知非常適合傳送高優先順序的資訊。

SQL Server Mobile Edition

SQL Server 2000 附隨有 SQL Server 2000 Windows CE Edition,此現稱為 SQL Server Mobile Edition 3.0 版。SQL Server Mobile Edition 中有許多與開發人員相關的重要新功能:

  • 您可以直接從 SQL Server Management Studio 在桌上型電腦上或裝置上建立 SQL Server Mobile Edition 資料庫。您也可以直接從 Management Studio 操作 SQL Server Mobile Edition 資料庫的結構描述,而不管資料庫是常駐在行動裝置或桌上型電腦上。您可以使用 SQL Server Management Studio 在裝置或桌上型電腦上執行以的 SQL Server Mobile Edition 資料庫為目標的查詢。您也可以利用 SQL Server Mobile Edition 的新功能,其中包含跟原始 SQL Server 一樣以 GUI 格式轉譯的 XML 顯示計劃,並使用查詢提示的功能,來覆寫 SQL Server Mobile Edition 中的查詢最佳化程式。這是您第一次能夠在裝置上控制最佳化計劃。
  • 您現在可以用資料轉換服務 (DTS) 物件編寫程式碼來交換資料。
  • 新的 SqlCeResult 集合是衍生自 SQL Server 2005 中的 SQLResult 集合。這允許 SQL Server Mobile Edition 擁有實際可捲動、可更新的游標。它允許與在裝置上的資料物件相繫結。
  • 您現在可以編寫應用程式來同步處理資料,同時讓主應用程式保持開啟狀態,並可讓兩個不同的應用程式同時存取裝置上相同的資料庫。
  • 您可以取得編入狀態列的通知,提供同步處理的狀態。在過去,完全無法得知同步處理的進度來通知使用者裝置並未停止回應。
  • 您可以透過更加積極的頁面再利用原則來維持小量的資料庫。
  • 您可以使用 SQL Server 語法來共用參數化的查詢程式碼。

語言增強功能

Transact-SQL 增強

Transact-SQL 一直以來都是 SQL Server 所有程式設計能力的基礎。SQL Server 2005 Beta 2 提供許多新的語言能力,用以開發可調整的資料庫應用程式。這些增強功能包括錯誤處理、新的遞迴查詢能力,以及對新 SQL Server Engine 功能的支援。在 SQL Server 2005 Beta 2 中的 Transact-SQL 增強功能提昇了您撰寫查詢的表達能力,讓您改進程式碼的效能表現並增進錯誤管理的能力。在強化 Transact-SQL 不斷投入的努力展現了它在 SQL Server 當中扮演重要角色的堅定信念。

遞迴查詢和常見的資料表運算式

常見的資料表運算式 (CTE) 是一種可由定義陳述式參照暫時命名的結果集。以它們簡單的形式來說,您可以把 CTE 想像成是衍生資料表的改良版,非常類似非永續性的檢視類型。您可以在查詢的 FROM 子句中以類似您參考衍生資料表和檢視的方式來參考 CTE。您只需定義 CTE 一次,即可在查詢中參考它數次。在 CTE 的定義中,您可以參照在相同批次定義的變數。您甚至可以在 INSERTUPDATEDELETECREATE VIEW 陳述式中以類似於使用檢視的方式來使用 CTE。不過,CTE 的真正威力在於它們的遞迴能力,也就是 CTE 包含對其本身的參考。當您想將查詢結果當作資料表參考,但是又不希望在資料庫中建立永續性檢視時,可以使用衍生資料表。然而,衍生資料表擁有一項限制,是 CTE 才可以克服的:您無法在查詢當中只定義衍生資料表一次,然後使用它數次;相反地,您必須在相同的查詢中定義數個衍生資料表。或者,您可以選擇定義 CTE 一次,然後在查詢中使用它數次,而不將它保存在資料庫。

非遞迴 CTE 可提升您的表達能力。但對於使用非遞迴 CTE 的每一段程式碼,您通常可以使用其他 Transact-SQL 建構 (如衍生資料表) 撰寫比較長的程式碼來達成相同的結果。該情況與遞迴 CTE 不同。當 CTE 參照它本身的時候,即視為遞迴。遞迴 CTE 是從至少兩個查詢部份 (以遞迴查詢的說法則為成員) 建構而成。一個是非遞迴查詢部份,同時也稱為錨點成員 (AM)。另一個則是遞迴查詢部份,同時也稱為遞迴成員 (RM)。查詢部份是由 UNION ALL 運算子聯結成單一 CTE。

PIVOT 和 UNPIVOT 運算子

SQL Server 2005 Beta 2 提供兩種新的關聯性運算子,亦即您在查詢的 FROM 子句中所使用的 PIVOTUNPIVOT。這些運算子會在輸入資料表值運算式上執行一些操作,並產生輸出資料表作為結果。PIVOT 運算子會將資料列旋轉成資料行,可能一路都會執行彙總。它根據特定的中樞資料行擴大了輸入資料表運算式,產生一個內含有中樞資料行中每個唯一值的資料行的輸出資料表。

PIVOT 運算子對於處理開放結構描述的案例和產生交叉分析報表時都很實用。在開放結構描述的案例中,您是以未先得知或是與每一實體型別不同的屬性集來維護實體。您應用程式的使用者會動態地定義屬性。您不是預先定義許多資料行並將許多 NULL 儲存在資料表中,而是將屬性分割成不同的資料列,並且只儲存每個實體執行個體的相關屬性。PIVOT 可讓您針對開放結構描述和其他您將資料列旋轉成資料行的情況產生交叉分析報表,可能一路都會計算彙總,並以實用的形式來呈現資料。

UNPIVOT 運算子會執行與 PIVOT 相反的作業,將資料行旋轉成資料列。它會根據中樞資料行來縮小輸入資料表運算式。UNPIVOT 運算子可讓您將預之前中樞化的資料加以標準化。

APPLY 運算子

藉由 APPLY 運算子,SQL Server 2005 Beta 2 可讓您在相關聯的子查詢中參照資料表值函式。APPLY 關聯性運算子可讓您針對外部資料表運算式的每一資料列叫用一次特定的資料表值函式。您可在查詢的 FROM 子句中指定 APPLY,與使用 JOIN 關聯性運算子的方式相似。APPLY 有兩種形式,即 CROSS APPLYOUTER APPLY

CROSS APPLY 會針對外部資料表運算式中的每一資料列叫用資料表值函式。您可以將外部資料表的資料行參考為資料表值函式的引數。CROSS APPLY 會傳回統一的結果集,這是從資料表值函式個別叫用的作業所傳回的所有結果編譯而成。如果資料表值函式傳回特定外部資料列的空集,則不會在結果中傳回該外部資料列。

OUTER APPLYCROSS APPLY 非常相像,它還多加了針對傳回空集合的資料表值函式從外部資料表傳回資料列。NULL 會以與資料表值函式的資料行相對應的資料行值傳回。

交易的例外處理

SQL Server 的早期版本會要求您在每個懷疑有錯誤的陳述式之後加入錯誤處理碼,跟 Microsoft Visual Basic 6.0 很像。為了集中錯誤檢查碼,您必須使用標籤和 GOTO 陳述式。此外,像資料型別轉換錯誤這類的錯誤還會導致您的批次終止;因此,您無法使用 Transact-SQL 阻止這些情況。SQL Server 2005 Beta 2 以非常類似在 Visual Basic .NET 和 C# 所提供的 TRY/CATCH Transact-SQL 建構的形式,引入了一套簡單卻非常強大的例外處理機制,來處理許多這類的問題。現在可捕捉到並處理過去曾導致批次終止的交易中止錯誤,只要這些錯誤不會嚴重到造成連線的中斷。

若要實作錯誤處理,您只需要簡單的寫一段想要在 BEGIN TRY/END TRY 區塊內執行的程式碼,並遵循 BEGIN CATCH /END CATCH 區塊內的錯誤處理碼即可。請注意 TRY 區塊必須有個相對應的 CATCH 區塊;否則,會得到語法錯誤。

DDL 事件通知

SQL Server 2005 Beta 2 可讓您擷取 DDL 和系統事件,並傳送事件通知到 Service Broker 服務。與同步處理的觸發程序相反,事件通知是一種允許非同步取用的事件機制。事件通知會傳送 XML 資料到特定的 Service Broker 服務,而事件取用者會非同步進行取用。事件取用者可使用 Service Broker Receive 陳述式的 WAITFOR 子句的擴充等候新資料到達。

全文檢索增強

SQL Server 2005 包含對豐富的全文檢索應用程式的支援。分類能力已經過加強,以便在要分類內容方面提供更大的彈性。查詢效能和延展性也經過大幅改進,而新的管理工具則提供更深入的全文檢索實作。

安全性增強

SQL Server 2005 受益於「高可信度電腦運算 (Trustworthy Computing)」行動,這是 Microsoft 為了在安全性、隱私權、可靠性和商業完整性方面改善客戶經驗的一項創新行動。在這項於 2002 年 1 月引進全公司的行動當中,Microsoft 現在遵守一些有助於確保我們的產品和產品部署在設計上、預設狀態上和部署上都保持安全的開發程序。Microsoft SQL Server 開發小組將該些程序加入了 SQL Server 2005 的開發過程。在部署過後,Microsoft 持續支援現行的客戶和合作夥伴以溝通安全性議題。這樣的結果將使得 SQL Server 2005 加入 SQL Server 最新版本最廣泛的安全性功能。

一般來說,這些功能和改進分成以下三個領域:

  • 限制使用者存取 SQL 伺服器: 對 SQL Server 有更大的掌控權,並投資各像機制讓系統管理員得以透過原則掌控 SQL Server 的存取權。
  • 停用服務和限制服務設定: 提供系統管理員以系統管理員指定的範圍和精良的細微度來限制 SQL Server 內部資源存取的能力,並確保他們在不違反最低權限的原則下有方便管理的系統。因為新伺服器安裝依預設會停用某些服務,客戶現在可以更積極決定要啟用哪些特定的額外服務。
  • 減少新功能的受攻擊面:從 SQL Server 安裝和設定開始,可將受攻擊面減至最小。在整個產品的開發週期,新功能都會經過檢閱並測試以達安全性標準,來協助減少受攻擊面。

結論

Microsoft SQL Server 2005 提供了開發人員所需的工具來建置新等級的資料庫應用程式。在消除程式碼執行和儲存位置的障礙,並且整合如 XML 的標準後,SQL Server 2005 為資料庫開發人員帶來更明亮的未來。本白皮書旨在重點介紹 SQL Server 2005 所能完成的事項。

頁首 回到頁首