国产探花免费观看_亚洲丰满少妇自慰呻吟_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' 

好~搞掂


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旌德县| 岐山县| 那坡县| 伊春市| 厦门市| 宁远县| 岐山县| 会理县| 阳西县| 泌阳县| 普兰县| 康定县| 邢台县| 定日县| 乌拉特后旗| 武胜县| 长宁区| 双流县| 广河县| 呼伦贝尔市| 新竹县| 开化县| 巴塘县| 平南县| 贵定县| 简阳市| 上思县| 兖州市| 井研县| 吴川市| 嫩江县| 兴安盟| 阜康市| 荣成市| 黄大仙区| 津市市| 邢台市| 互助| 肃宁县| 尼勒克县| 怀安县|