PCB 周期计算采用 SQL函数调用.net Dll实现 (实现代码重用目的)
玩过SQL SERVER数据库经常经需要写存储过程,函数之类的,当业务逻辑过于复杂,用SQL去写简直是恶梦,
这里以PCB周期函数用.NET写好了,用MS SQL调用.net基本步骤整理一下如下
第1步:SQL服务器CLR配置(允许SQL调用.net程序),执行SQL命令
sp_configure 'show advanced options', 1; RECONFIGURE WITH override GO sp_configure 'clr enabled', 1; RECONFIGURE WITH override GO Sp_changedbowner 'sa',true --sa改为当前登入用户名 alter database [dbname] set trustworthy on --bbname 改为自己的库名
第2步:注册 CLR 程序集
create ASSEMBLY SQLfunctionAssembly FROM 'D:\Program Files\SQLClr.dll' --改为自己C#写的dll路径填写 WITH PERMISSION_SET = UNSAFE;
创建的.net程序集会加载成功,数据会写入下表:
第3步:创建标量函数
CREATE FUNCTION[dbo].[getWeek] ( @CurrentDate datetime, @Format NVARCHAR(100), @AddDay int ) RETURNS NVARCHAR(128) WITH EXECUTE AS CALLER AS EXTERNAL NAME [SQLfunctionAssembly].[SQLClr.SQLfunction].[getWeek] --[SQL程序集名].[命名空间.类名].[方法名]
第4步:执行测试结果:
SELECT dbo.getWeek('2009-12-31','WWYY',0)
C#代码:
public partial class SQLfunction {////// 获取周期 /// /// /// /// ///[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read, IsDeterministic = true, Name = "getWeek")] public static SqlString getWeek(SqlDateTime CurrentDate,SqlString Format, SqlInt32 AddDay) { SqlString result = tool.getWeek(CurrentDate.Value, Format.Value, AddDay.Value); return result; }}
具体可以参考(有详细说明):
https://www.cnblogs.com/Brambling/p/8000911.html