MSSQLSERVER新增c# clr程式集的使用方法

張龍豪發表於2015-07-03

前言

MSSQLSERVER提供程式集,無疑可以讓程式設計人員更加便捷的運算元據庫資料,比如c#寫的函式,可以在資料庫當作sql的函式使用,你想想他對不熟悉資料庫的程式設計師來說是有多麼的嗨。這麼好的機制,大家當然不能錯過,但是對於資料庫變更遷移,可能會存在障礙與不便。所以建議大家在使用sqlsesrver clr程式集的時候也要做個權衡,以免給資料庫以後的擴張帶來不便。建議大家單次資料,資料過濾,的時候使用sqlserver clr程式集。長期依賴的話,還是另外選擇解決方案。

MSSQLSERVER接入c#clr程式集,使c#函式變sql函式

模擬場景:

1、資料庫表資料如下

2、問題描述:AreaPoints欄位的Json資料格式在c#的第三方json資料解析中是沒有問題的。但是他是由多埠呼叫資料,呼叫的程式可能是java或者其它語言,那麼這種不規範的Json資料格式就不能被解析,這樣一來就會存在資料錯誤。

3、解決方案:這裡我就不扯淡啦,方案一定是很多中,今天我切入主體,使用c#的類方法,使不規範的即送資料格式轉換成統一規範的Json資料格式。

4、秀具體操作如下。

MSSQLSERVER接入c#clr程式集,具體操作步驟,跟著做

1、建立c#函式。解決方案下新增--->新建專案

2、新增-->新建項---SQL Server ---SQL CLR C#------SQL CLR C#使用者定義的函式

3、建立c#函式方法,不規則json轉規範的json格式

 

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    //靜態方法
    public static SqlString ToJson1(SqlString str)
    {
        try
        {
            string json = str.ToString();
            //雙引號不變
            if (json.Contains("\""))
            {
                return json;
            }
            //單引號換雙引號
            else if (json.Contains("'"))
            {
                return json.Replace("'", "\"");
            }
            //沒引號的加雙引號
            else if (json.Contains("lng:"))
            {
                json = json.Replace("lat", "\"lat\"").Replace(":", ":\"").Replace(",lng", "\",\"lng\"").Replace("}", "\"}");
                return json;
            }
            else
            {
                return json;
            }
        }
        catch
        {
            return str;
        }
    }
}

 

SQLSERVER新增Sql c# clr的2種方式展示,1、程式釋出。

1、檢視自己建立的c# clr 程式的屬性,選中專案設定,確定目標平臺與自己所要生成到的資料版本一直,不要一邊是sqlserver2008一遍是sqlserver2012,這樣是釋出不成功的。還有選擇SQLCLR,目標框架要在4.0一下,我選用的是3.5.

2、開啟資料庫伺服器配置選項clr enabled

 

---開啟所有伺服器配置選項
EXEC sp_configure N'show advanced options', N'1' 
RECONFIGURE WITH OVERRIDE
--開啟clr enabled 選項
EXEC sp_configure N'clr enabled', N'1'
RECONFIGURE WITH OVERRIDE 
--關閉所有伺服器配置選項
EXEC sp_configure N'show advanced options', N'0' 
RECONFIGURE WITH OVERRIDE
--如果存在許可權問題,執行下面一段指令碼
alter database [master] set TRUSTWORTHY on
EXEC sp_changedbowner 'sa'

 

3、釋出 sql c# clr 程式集,選擇要釋出的伺服器,與要釋出到哪個資料庫。確定。

4.配置釋出成功

SQLSERVER新增Sql c# clr的2中方式展示,2、手動在資料庫新增程式集。

1、找到自己寫的sql c# clr 程式集下生成的bin資料夾下的dll檔案

2、同樣執行上面的指令碼,開啟資料庫伺服器配置選項clr enabled,還有給sa付許可權的指令碼。

3、開啟資料庫下的可程式設計性,程式集,新建程式集

4、執行下面註冊函式的指令碼

 

create function dbo.ToJson1(@patten [nvarchar](4000))
RETURNS nvarchar(4000)
AS 
---sql c# clr 程式集檔名.類名.方法名
EXTERNAL NAME BgSqlFun.UserDefinedFunctions.ToJson1

 

sql c# clr 自定義函式的使用

上面2種新增方式,任意一種新增都行。

 

declare @points varchar(4000);
select @points=AreaPoints from Mp_AreaPositionDetails where id=672
select dbo.ToJson1(@points)

 

就這樣做啦一個簡單的示例,希望能給一些選手,提供到幫助。thanks。

相關文章