1. 程式人生 > 其它 >SQL Server CLR全功略之一---CLR介紹和配置

SQL Server CLR全功略之一---CLR介紹和配置

   Microsoft SQL Server 現在具備與 Microsoft Windows .NET Framework 的公共語言執行時 (CLR) 元件整合的功能。CLR 為託管程式碼提供服務,例如跨語言整合、程式碼訪問安全性、物件生存期管理以及除錯和分析支援。對於 SQL Server 使用者和應用程式開發人員來說,CLR 整合意味著您現在可以使用任何 .NET Framework 語言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)編寫儲存過程、觸發器、使用者定義型別、使用者定義函式(標量函式和表值函式)以及使用者定義的聚合函式。 下面列出了這一整合的其中一些主要優點:
  •  更好的程式設計模型。
  •  改進了安全和安全性。
  •  能夠定義資料型別和聚合函式。
  •  通過標準化環境簡化了開發。
  •  具備改善效能和可擴充套件性的潛力。

既然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。

  •  更好的程式設計模型。
  •  改進了安全和安全性。
  •  能夠定義資料型別和聚合函式。
  •  通過標準化環境簡化了開發。
  •  具備改善效能和可擴充套件性的潛力。

既然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。