zoukankan      html  css  js  c++  java
  • 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 FilesSQLClr.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

  • 相关阅读:
    iOS BCD编码
    Java泛型解析(02):通配符限定
    HDU 5317 RGCDQ(素数个数 多校2015啊)
    通过getElementById来取得Form里的表单元素
    关系型数据库工作原理-快速缓存(翻译自Coding-Geek文章)
    cocos2d-x之道~制作第一款文字游戏(二)
    Html5实现手机九宫格password解锁功能
    [Python] 字典推导 PEP 274 -- Dict Comprehensions
    NYOJ 36 最长公共子序列 (还是dp)
    【设计模式】学习笔记5:工厂模式
  • 原文地址:https://www.cnblogs.com/pcbren/p/9218813.html
Copyright © 2011-2022 走看看