Sql Server 添加外部程式集基本操作

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   os   使用   sp   資料   

原文:Sql Server 添加外部程式集基本操作

簡介:有時候Sql Server的內建函數沒有那麼好用的時候,可以引用一下外部程式集,下面獻下醜,做下添加外部程式集操作

1、準備程式,編譯出一個MyCLR的DLL.

 

public class CLRClass    {        [Microsoft.SqlServer.Server.SqlFunction]        public static int MyFun(int a, int b)   //必須使用靜態方法,非靜態方法會報錯。        {            return a <= b ? a : b; //其實就是一個判斷最小值函數        }    } 

 

 

2、添加程式集。

CREATE ASSEMBLY MyClr1    FROM ‘I:\Test\MyClr\MyClr\bin\Release\MyClr.dll‘         WITH permission_set = Safe/EXTERNAL ACCESS/UnSafe; -- (預設推薦/可以訪問外部資源/不受限制地訪問資源)

 

  • 對於使用 SAFE 或 EXTERNAL ACCESS 許可權集建立的程式集:
    • 程式集代碼應是型別安全的。通過對程式集運行通用語言執行平台驗證工具可建立型別安全。  
    • 程式集的類中不應包含任何待用資料成員,除非這些成員標記為唯讀。
    • 程式集中的類不能包含終結器方法。

  UNSAFE 模式是不受任何限制的訪問資源。

這是線上手冊上面對這幾種模式的限制。

 

如果有靜態變數,在Safe 模式下就會報錯了

 public class CLRClass    {        static int i = 0;        [Microsoft.SqlServer.Server.SqlFunction]        public static int MyFun(int a, int b)   //必須使用靜態方法,非靜態方法。        {            i += 1;            return a <= b ? a : b;        }

 

 

然後在資料庫執行 

ALTER ASSEMBLY MyClr1FROM ‘I:\Test\MyClr\MyClr\bin\Release\MyClr.dll‘ WITH permission_set = Safe;

 

叮叮,立即中獎

 

解決方案。去掉靜態變數,將靜態變數改為ReadOnly模式,或者將程式集改為 UNSAFE模式。去掉靜態變數和ReadOnly就不說了。改變為UNSAFE模式,可以執行以下語句
ALTER DATABASE TestDB set TRUSTWORTHY ON;     --資料庫擁有者(DBO)擁有 UNSAFE ASSEMBLY 許可權,且資料庫具有 TRUSTWORTHY 資料庫屬性;或者,程式集已使用其對應登入名稱具有 UNSAFE ASSEMBLY 許可權的認證或非對稱金鑰加以簽名 goALTER ASSEMBLY MyClr1FROM ‘I:\Test\MyClr\MyClr\bin\Release\MyClr.dll‘ WITH permission_set = UNSAFE;go--執行成功

 

建立了程式集,然後添加個函數映射來使用

添加函數映射CREATE function ClrFBitContains( @a as INT , @b as int )returns INTas  EXTERNAL NAME MyClr1.CLRClass.MyFun確認是否需要開啟CLR執行許可權exec sp_configure ‘clr enabled‘, ‘1‘reconfigureSELECT dbo.ClrFBitContains(1,3)PS:每次修改完動態庫,需要重新執行修改一次程式集定義才能更新同步上去CREATE ASSEMBLY MyClr1    FROM ‘I:\Test\MyClr\MyClr\bin\Release\MyClr.dll‘ 

 

 好~搞掂

 

Sql Server 添加外部程式集基本操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.