本文讓我們談談關於這種編寫存儲過程的新方法的五個常見問題。它們值得你一讀的……
在SQL Server 2000中,只有一種方法編寫存儲過程:使用T-SQL 語句。學習以前版本的SQL Server中存儲過程的編寫是一門課程。但是SQL Server 2005讓你使用.NET語言家族(主要是VB.NET和C#)來編寫存儲過程(以及函數、觸發器和其他的一些東西)成為可能。
1. 我為什麼要使用CLR模型來寫存儲過程?
主要是因為數據。SQL CLR在一些方面執行較快:其中,字符串處理要比T-SQL中快很多,並且它還有很多健壯的方法處理錯誤。還有,假如存儲過程必須和數據庫之外的東西(文件系統或者Web Service)進行交互,那麼使用CLR SP更好,因為使用CLR處理這些事情更加方便。
2. 什麼類型的存儲過程從CLR中獲益最大?
通常,執行繁重的數據計算任務的SP會比只是將數據抽取出來的SP更能從CLR中受益。如果你編寫了一個僅僅對復雜SELECT語句進行包裝的CLR SP,那麼你可能看不到明顯的性能提升,因為在CLR SP中SQL語句在SP每次執行的時候會被驗證一次。事實上,這樣的CLR SP會比SELECT作為T-SQL SP性能更糟糕。
一條好的經驗法則應該是這樣:假如出問題的SQL只有幾行,那麼將SQL保持為傳統的SP。假如你采用CLR的方式來操作大的數據集,那麼你可以使用傳統的SP獲得這個大的數據集,而在CLR SP中調用這個傳統的SP。這樣,這個傳統的SP是預先編譯的而獲得加速,而數據轉換可以在有利於數據處理的CLR SP中完成。
注意:這裡假設你想要在數據層而不是在表示層來執行這些精細的數據轉換。理想情況下,在開始編寫代碼之前,你需要做出一些這樣的決定。
3. 我是否應該將我已有的存儲過程轉換到CLR模型?
簡單的答案是“是否這樣做會產生實際的好處。”一種檢驗是否滿足這一標准的方法是編寫和某個已有存儲過程對等的CLR實現,並且使用實際數據來對這兩個實現進行測試。留下老的存儲過程,除非你可以確信新的CLR實現滿足:(a)按照計劃執行;(b)提供了性能好處。CLR,和其他的東西一樣,不是靈丹妙藥。
4. 是否可以不使用開發IDE就能編寫Common Language Runtime的存儲過程?
是的,你可以使用C#編譯器就可以做到。但是使用Visual Studio或者類似的IDE可能讓事情容易一些,尤其在你為一個企業完成轉換或者實現一整套SP的情況下。
5. 讓它自動完成這種轉換很難嗎?
明顯,你需要VB.NET、C#其中一種語言的使用經驗。真正的SQL命令是包裹在CLR代碼中的,因此一旦你精通了使用方法,那麼在CLR重新編寫已有的T-SQL代碼就不難了。真正的難點在學會如何使用這門語言來優化你目前的工作,這是無法用幾句話的就能說清楚的。