国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

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

2024-08-31 00:55:22
字體:
來源:轉載
供稿:網友
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' 

好~搞掂


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杨浦区| 大港区| 伊宁县| 同心县| 万安县| 鄂托克旗| 大同市| 建阳市| 土默特右旗| 河东区| 龙泉市| 庆城县| 玛沁县| 蒙自县| 朝阳区| 磴口县| 德格县| 孟村| 拜城县| 垣曲县| 邢台市| 贵德县| 洞口县| 伊川县| 安国市| 厦门市| 河津市| 娄底市| 铜山县| 成武县| 淳化县| 博野县| 手机| 囊谦县| 建昌县| 广灵县| 炎陵县| 桦南县| 吉首市| 靖西县| 阿拉尔市|