MSSQLSERVER添加c# clr程序集的使用方法


前言

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM