PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现

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
    {
/// <summary>
        /// 获取周期
        /// </summary>
        /// <param name="CurrentDate"></param>
        /// <param name="Format"></param>
        /// <param name="AddDay"></param>
        /// <returns></returns>
        [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

 

转载于:https://www.cnblogs.com/pcbren/p/9218813.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值