標籤:des style blog http io color ar os 使用
公用語言運行庫 (CLR) 是 Microsoft .NET Framework 的核心,為所有 .NET Framework 代碼提供執行環境。 在 CLR 中啟動並執行代碼稱為Managed 程式碼。 CLR 提供執行程式所需的各種函數和服務,包括即時 (JIT) 編譯、分配和管理記憶體、強制型別安全、異常處理、線程管理和安全性。
通過在 Microsoft SQL Server 中託管 CLR(稱為 CLR 整合),可以在Managed 程式碼中編寫預存程序、觸發器、使用者定義函數、使用者定義型別和使用者定義彙總函式。 因為Managed 程式碼在執行之前會編譯為機器碼,所以,在有些方案中可以大大提高效能。
Managed 程式碼使用程式碼存取安全性 (CAS)、代碼連結和應用程式定義域來阻止程式集執行某些操作。 SQL Server 使用 CAS 來協助保證Managed 程式碼的安全,並避免作業系統或資料庫伺服器受到威脅。
本節只是為了提供足夠的資訊,以便開始使用 SQL Server CLR 整合編程,而並非為了提供完整的資訊。 有關更多詳細資料,請參見您正在使用的 SQL Server 版本的“SQL Server 聯機叢書”版本。
啟用 CLR 整合
預設情況下,Microsoft SQL Server 中禁用公用語言運行庫 (CLR) 整合功能,必須啟用才能使用通過 CLR 整合實現的對象。 要使用 Transact-SQL 啟用 CLR 整合,請使用如下所示的 sp_configure 預存程序的 clr enabled 選項:
sp_configure ‘clr enabled‘, 1GORECONFIGUREGO
可以通過將 clr enabled 選項設定為 0 來禁用 CLR 整合。在禁用 CLR 整合時,SQL Server 停止執行所有 CLR 常式並卸載所有應用程式定義域。
第一步 建立環境
首先我們要開啟Sql2005的IDE,建立 一個資料庫,這個過程 就不多說了,資料庫名稱 是 Text
下在我們開啟VS2005 或是2008(選擇.net2.0因為這裡只支援2.0的CLR)建立項目
在這裡跟建立其它項目就有很大不同的,我們要選擇一個Office下的資料庫,選擇SqlServer項目 名稱為 SqlClrProject 位置您可以自己選擇電腦上的任意位置就可以了,單擊確定
在這裡我們要選擇一下自己的資料,如果你不是第一次的話那麼會預設的列出所有選擇過的資料庫,而這裡我的選擇過了所以出現一個 已有的選擇項,當然如果 你是第一次的話 是沒有選擇項目的,這時我們單擊 添加新引用(A)...
相信這裡大家都 很熟悉了吧,選擇一下我們剛剛建好的資料庫吧,
然後單擊確定
在這裡我們單擊是就可以了,因為我們得啟用它來調試我們下面的操作
建立好的項目結構如所顯
因為我們這裡要使用函數,所以我們右擊項目---添加
我們可以看的到裡面已經出了很多資料庫中常用的對象了,
我們單擊建立項也就是第一個
我們給函數名稱改為StrCount意思就是統計一下輸入的字元個數
我們選擇的是使用者定義的函數
好了單擊添加就可以了,
系統會自動產生一段代碼
代碼
到這裡我們的前期準備工作就完了,我們只要修改這個類就行了,
[Microsoft.SqlServer.Server.SqlFunction]
這句是表示在Sql中的物件類型
SqlFunction 就是函數
SqlProcedure 預存程序
SqlTrigger 觸發器
還有其它的大家自己查看一下吧
第二步 部署自己定義函數
我們這個函數是用來計算字元長度的我把完成的代碼放在下在面
代碼
現在函數寫好了,這個函數就不做過多的解釋了, 因這這個只是得到字串的長度這東西太基礎了,呵呵
我們怎麼樣才能在Sql2005裡使用我們這個函數呢?
其實很簡單我們產生一下項目,產生成功之後,我們右擊項目
單擊部署項目,等部署成功就可以了。那我們部署的程式在那裡呢,現在我們開啟Sql2005IDE
找到如所示
我們會發現在Sql2005裡的標題值函數裡出現了一個我們自己定義的函數,那怎麼使用他呢,很簡單其實是跟我們平時使用的是一樣的
我們建立查詢
因為我們Sql預設的是關閉CLR功能的,我們需要用命令開啟一下
看到如所顯示的就表示 你的功能開啟成功了,下面我們就可以自由的使用函數了,跟使用系統自己定義的函數是一樣的,下面我統計幾個大家可以看
這樣一這樣
這樣就是利用sql的ClR執行c#程式了,是不是很方便,當然我們可以根據自己的需要把這個函數改的複咋一下,不過方法都是一樣的像預存程序和觸發器的實現原理都 也是這樣的。
我加上一段,調試功能 是.net裡用來解決問題最多的功能了,那CLR是否支援呢?答案是肯定的,只要我們在這個Text.Sql檔案裡打個段點就行了,因為在這個檔案裡執行的結果和資料庫裡的是一樣的
代碼
我們可以跟自己的Sql語句結合起來使用,就是用到我們自己定義的預存程序裡這樣可以把複咋的邏輯用c#代碼來實現是不是感覺很方便,Clr是個好東西,他不僅僅只有這些,還有什麼進階的功能 呢,我們下次博文接著說吧!!!
為了方便大家寫代碼我在這裡加上
use Text
EXEC sp_configure ‘show advanced options‘,‘1‘;
go
EXEC sp_configure ‘clr enabled‘,‘1‘
go
reconfigure with override;
go
SQL Server CLR 整合簡介