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 onEXEC sp_changedbowner 'sa'
3、發布 sql c# clr 程序集,選擇要發布的服務器,與要發布到哪個數據庫。確定。
4.配置發布成功
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.ToJson1sql c# clr 自定義函數的使用
上面2種添加方式,任意一種添加都行。
declare @points varchar(4000);select @points=AreaPoints from Mp_AreaPositionDetails where id=672select dbo.ToJson1(@points)
就這樣做啦一個簡單的示例,希望能給一些選手,提供到幫助。thanks。
新聞熱點
疑難解答