更好的編程模型。
改進了安全和安全性。
能夠定義數據類型和聚合函數。
通過標准化環境簡化了開發。
具備改善性能和可擴展性的潛力。
既然CLR這麼靈活,那麼我們如何在T-SQL和CLR之間做出選擇呢?一般情況下,我們當以T-SQL為主,在下面幾種情況下,應該考慮使用CLR:
SQL中涉及大量的邏輯判斷和邏輯運算。比如需要在數據庫級別自定義加密算法,解密算法等。
T-SQL無法處理需求。比如需要在SQL中進行正規表達式的判斷等。
邏輯判斷過於復雜,需要使用大量游標進行處理。這種情況一般要進行測試,因為CLR不一定比游標快,關鍵是看你怎麼寫。
下面介紹一下如何開啟CLR和兩種創建CLR的方法。關於如何在VS中編寫CLR程序,請看後續章節。
開啟CLR。
在SQL Server2005/2008裡面,CLR默認是關閉的。可以使用如下SQL語句開啟CLR。
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
創建CLR。
方法一:使用DLL文件進行創建
CREATE ASSEMBLY AssemblyName from ‘DLLPath’
例如:CREATE ASSEMBLY AssemblyName from ‘c:\hello.dll’
方法二:使用文件16進制流進行創建
CREATE ASSEMBLY AssemblyName from 文件十六進制流
例如:CREATE ASSEMBLY AssemblyName from 0x123344……
其中0x12334……是文件c:\hello.dll的十六進制流。可以使用UltraEdit等編輯器把相關dll文件的十六進制流copy出來。
相比較,方法一簡單,屬於外部引用,通過創建就可以知道是哪個文件。但是dll文件路徑必須可以被SQLServer所訪問,且部署時dll要隨SQLServer變化而變化。
方法二是把流寫進SQLServer中,從一定程度上屏蔽了代碼。如果此dll不大的話,推薦使用方法二來創建CLR。