程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 《Microsoft SQL Server 2005技術內幕:T-SQL程序設計》推薦序——胡百敬

《Microsoft SQL Server 2005技術內幕:T-SQL程序設計》推薦序——胡百敬

編輯:關於SqlServer

在關系數據庫中,以集合(set)的方式來處理大量記錄才有效率,使得 SQLStructure Query Language)語言無法被C#/Java/Visual Basic 等面向對象語言取代。而善用數據是信息系統成功的關鍵因素之一,現今大量交易、數據整合、商業智能的結構性需求大增,將使SQL顯得更加重要。

隨著 Microsoft SQL Server 版本的演進,衍生自 ANSI SQL T-SQLTransact Structure Query Language)語言變得獨立且功能強大,擁有眾多用戶,是解決各種數據問題的主流語言。在 SQL Server 的功能大量擴增並廣泛進入企業各系統後,日益龐大的數據量讓 T-SQL 發揮了重要的作用。

雖然討論 T-SQL 的書很多,但因為 SQL Server 2005 巨幅擴增了功能,且標准化了許多語法,將原來需要通過系統存儲過程、DBCC 才能創建、設置或維護的功能,都回歸到標准的 T-SQL 語法,並放寬了語法的自由度。例如:引入 .Net 對象作為 SQL Server 服務器端對象、XML 數據類型與 XQuery 語法、Service Broker 消息隊列服務、以 DDL 建立系統登錄與數據庫用戶、通過 T-SQL 維護索引、TOP 運算符可以搭配變量或子查詢,以及搭配 CTE 使用在 UPDATEDELETE 語法中、聚合運算搭配 OVER 運算符等,諸多功能在 SQL Server 2000中是無法用T-SQL辦到的。因此,以往的 T-SQL 書籍將不足以講解2005SQL Server 的功能。

若論微軟 SQL Server方面的最重要著作,大概非 Inside Microsoft SQL Server 系列叢書莫屬了。從SQL Server 6.5 以來,一直常駐在專業 SQL Server DBA 案頭的,就是對應各版本的Inside Microsoft SQL Server系列叢書了。這不是筆者的妄加贊譽,而是素有信息界諾貝爾獎稱呼的圖靈獎(Turing Award)得主 Jim Gray 在該系列書籍的序言中所說的。筆者本身也以讀過該系列的書,代表進入了該版本的世界(例如要熟悉 SQL Server 2000,先讀Inside Microsoft SQL Server 2000),以此為深入了解 SQL Server 的標准。

由於大幅改版與新增功能,導致以往出書速度還蠻快的 Inside Microsoft SQL Server 系列,這次讓大家從 SQL Server 2005 上市後等了一年。也由於功能繁多,原本已極為厚重的 Inside Microsoft SQL Server 再也無法以單行本面世,而改為四本合集的系列叢書。先前 Inside SQL Server 各版本的作者 Kalen Delaney,在此次 Inside Microsoft SQL Server 2005 的四本書中,改任叢書編輯(SerIEs Editor),並親自撰寫《Inside Microsoft SQL Server 2005 : The Storage Engine》一書。

此刻,我們需要全面地重新認識 T-SQL,夠分量的書籍大概非《Inside Microsoft SQL Server 2005 : T-SQL Querying》和本書莫屬。兩書的作者群裡,以資深的講師與顧問 Itzik Ben-Gan 為首,包含SQL Server 2005 團隊的兩位產品經理,分別負責SQL Server 查詢引擎和 Service Broker 的深入介紹,以及其他擁有多年經驗的顧問與教師們合作撰寫。因此,兩本書中皆有著技術底層的詳細解說,搭配各項功能的最佳應用實踐。

這兩本書主要以集合數據處理(set-based query)和程序邏輯(procedural programming)兩個方面來區分。前者重視 SQL DML 語法的邏輯和效率,本書則強化搭配過程控制(如 IFWHILE、游標等)所建構的服務器端對象,如函數、存儲過程、CLR 對象、Service Broker 等。

筆者一直認為技術書籍與聯機幫助不同的地方是技術書籍提供應用場景與閱讀趣味,將技術與實際應用串起來。因為聯機幫助寫得像字典,若將信息語言的應用比喻為作文,則一般人很難光靠一本字典學會作文。我們需要看文章來模擬筆觸、技法與結構。在學習信息技術時,自然需要實際場景和程序代碼范例。而這兩本書所提供的 T-SQL 范例大都簡短有力,兩三行就切中要旨,由范例就可看出作者的功力。對於 T-SQL 的方方面面,作者們都進行了提綱挈領、深入淺出的講解,不管是凸顯語法結構、運算符、適用性,還是建立服務器對象,都讓有T-SQL基礎的人能迅速抓住重點。

使用T-SQL如同激蕩腦力的智力測驗,同一個問題讓人驚歎的解法層出不窮,需要經驗與知識的累積,是技術與藝術的展現。而這兩本書讀來讓人愉悅,有如在讀 T-SQL 的秘技,作者整合了不同的技術,並將它們混在一起使用。例如,以一般的 SELECT 語法查詢,要將多筆記錄的域值組成符號分隔的單一字符串時,會采用類似如下的做法。

DECLARE @c nvarchar(4000)

SET @c=''

SELECT @c=@c + CustomerID +',' FROM Customers

SELECT @c

在上述范例中,會返回 Customers 數據表中以逗號分隔所有客戶編號的單一字符串。但作者在本書中,強調此種方法的不確定性,因為微軟並沒有明文保證此種連接字符串的方法一定可行。但由於 FOR XML 子句在 2005 版本時多了 PATH 選項,因此該組字符串可以換成如下標准的查詢方式。

SELECT CustomerID + ',' AS [text()]

FROM Customers FOR XML PATH('')

書中充滿了此種結合不同技術的意想不到之解法,讓懂得關鍵之人頓感妙趣橫生,不懂奧妙之人,仍可借鑒引用。

本書的目的是為了幫助你熟悉 T-SQL 語言,並通過該語言撰寫 SQL Server 服務器端的對象,例如視圖、用戶自定義函數、存儲過程、觸發器等,由於未解釋 T-SQL 基礎語法定義,屬於進階的書籍。其內各章節大都彼此獨立,且作者所擬的章節針對性很強,你可以浏覽後,選擇主題切入。日後在工作上需要應用到該項功能時,再回頭精研作者所闡述的要旨。

4章詳細解釋了T-SQL一般使用中讓人困擾的用法,例如以字符類型描述日期時間時,最好采用 [yy]yymmdd[ hh:mm[:ss][.mmm]] 格式,例如以‘20060423 20:14:42.132’來表示時間最佳。另外還探討了動態組織與執行 SQL 語法、臨時表(Temporary Table)和表變量(Table Variable)的迷思、游標(Cursor)的正確使用方式等,針對以 T-SQL 撰寫商業邏輯時常用的技巧,作者詳加剖析了較佳的用法。

在其後的章節中,分別解釋了為何要在服務器端創建視圖、函數、存儲過程、觸發器、端點、Service Broker 等對象,以及事務管理和錯誤處理。書中解釋了許多關於性能的議題,如第6章特別強調了用戶自定義函數的正面價值在於:提供了安全、彈性以及程序的可維護性外,但它可能損傷性能。而第7章說明了存儲過程雖然會因為緩存執行計劃而提升性能,但若數據分布不平均,造成索引誤用,依然損傷性能。因此需要小心搭配整個存儲過程的 WITH RECOMPILE 選項,或是 SQL Server 2005 新提供的:單句查詢語法搭配 OPTIONRECOMPILE)選項。

讀到 Service Broker 的產品經理 Roger Wolter 所撰寫的第11章時,才能理解由於時間的壓力,為了趕上市而分割 SQL Server 2005 的部分功能。但因功能尚未完成,導致保留的 T-SQL 語法讓人莫測高深,這些情況在本章有了解釋。例如 Service Broker 在打開對話時,總要以BEGIN DIALOG CONVERSATION 語法開始,筆者就一直懷疑是否自己的英文能力太差,為何看不出Conversation Dialog 這個關鍵詞的用途?原來 Conversation 分為 Dialog Monolog 兩種,Dialog 是兩邊的服務可以互為通信,Monolog 則是發起端單方面的聲明。但 Monolog 在這個版本還未做出來,而為了下一個版本的兼容性,本版就需要保留使用 Dialog 關鍵詞。另外,在建立 Service Broker 的對話時,來源端的 Service 名稱可以直接指定 Service 對象名稱,但目的端卻需要用字符串格式,讀了此書才知道因為未來目的端可能不局限是 SQL Server 所提供的服務,因此以一般的文字字符串來描述。

本書的譯者趙立東老師有6年的開發經驗,精通 .Net SQL Server老師翻譯本書非常認真,不僅更正了原書提出的勘誤,且在翻譯過程中,經常與原作者Itzik討論和並向他請教,同時也不時和筆者交換意見。所以,在他翻譯的過程中,我受益不少。譯者與博文視點曾合作翻譯了《Programming ASP.Net中文版第3版》一書。此外,他也正在和其他譯者一起翻譯《Inside Microsoft SQL Server 2005:T-SQL Querying》一書,並擔任該書的審校工作,這本書是筆者期待的另一本佳作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved