本案例在VS2017环境中开发;

  1、新建项目,“数据库项目”,添加 UserDefinedFunctions.cs类文件,代码如下:

using System;
using System.Data;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.Collections.Generic; public class UserDefinedFunctions
{
   //标量值函数
[Microsoft.SqlServer.Server.SqlFunction(Name = "Clr_HelloSqlClr")]
public static SqlString HelloSqlClr(SqlString input)
{
return input;
}    //表值函数
[Microsoft.SqlServer.Server.SqlFunction(Name = "Clr_CreditList",
FillRowMethodName = "SplitFillRow",
TableDefinition = "typename nvarchar(30),loanbal nvarchar(10),nowovercout nvarchar(3)")]
public static IEnumerable CreditList()
{
List<ReturnData> returnDataList = new List<ReturnData>();
returnDataList.Add(new ReturnData("a", "a","a"));
returnDataList.Add(new ReturnData("b", "b", "b"));
returnDataList.Add(new ReturnData("c", "c", "c"));
return returnDataList;
} public class ReturnData
{
public SqlString TypeName { get; set; }
public SqlString LoanBal { get; set; }
public SqlString NowOverCount { get; set; }
public ReturnData(string name, string password,string overcount)
{
this.TypeName = name;
this.LoanBal = password;
this.NowOverCount = overcount;
}
} public static void SplitFillRow(object returnDataObj,
out SqlString typename, out SqlString loanbal, out SqlString overcount)
{
ReturnData item = returnDataObj as ReturnData;
typename = "";
loanbal = "";
overcount = "";
if (item != null)
{
typename = item.TypeName;
loanbal = item.LoanBal;
overcount = item.NowOverCount;
}
}
}

  2、搭建 csc.exe 环境,在 计算机-属性-高级系统设置-环境变量 中,系统变量中找到 Path,双击打开后,在输入框尾端加上 “;C:\Windows\Microsoft.NET\Framework64\v3.5”,

由于SQL2008R2 只支持.NET 3.5 所以引用 3.5版本的路径。在.NET 3.5版本路径下,双击 csc.exe,打开系统cmd 输入 “csc /?” 返回正常,则说明csc环境搭配完成;

  3、打开cmd 输入 “E:\> csc /target:library /out:SqlServer.SqlClr.Functions.dll  E:\UserDefinedFunctions.cs”  ,E:\> 代表所在位置,目前在E盘根目录,E:\UserDefinedFunctions.cs 表示cs文件所在路径,回车运行,将在 E盘根目录下生成 SqlServer.SqlClr.Functions.dll 文件;

  4、在SQL2008 R2 中执行

CREATE ASSEMBLY [SqlServer.Test.Functions]
FROM 'E:\SqlServer.SqlClr.Functions.dll'
WITH PERMISSION_SET = SAFE
CREATE FUNCTION [dbo] . [Clr_CreditList] ()
RETURNS table
(
typename nvarchar(30),
loanbal nvarchar(10),
nowovercout nvarchar(3)
) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlServer.Test.Functions] . [UserDefinedFunctions] . [CreditList]

  调用:

select *
from dbo.Clr_CreditList()

C#编写CLR函数的更多相关文章

  1. 编写CLR存储过程中使用SqlDataRecord

    温习一下这些天学习的CLR编程,存储过程,函数. 编写CLR的存储过程,运行起来的效率,果然比普通的SQL语句,存储过程或是函数均高. 以后专案需求,或是执行效率较高的SQL,得写成CLR程序,再部署 ...

  2. 正则表达式 第六篇:调用CLR函数执行正则查询

    在SQL Server数据库中可以执行模糊查询,像like子句,和全文查询(Fulltext search),但是无法直接执行正则查找,SQL Server没有执行正则表达式的内置函数,但是我们可以创 ...

  3. 不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数

    不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数. 这是一道面试题,可以使用递归的方式解答,答案如下: #include <stdio.h> int mylen(cha ...

  4. c程序设计语言_习题1-16_自己编写getline()函数,接收整行字符串,并完整输出

    Revise the main routine of the longest-line program so it will correctly print the length of arbitra ...

  5. H面试程序(1)编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的 下一秒

    编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒. 如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005年 1 月 1 日 0 时 0 分 0 秒. ...

  6. 第九十六题(编写strcpy 函数)

    96.08 年中兴校园招聘笔试题 1.编写strcpy 函数 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 当中st ...

  7. 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数

    Description 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数.n由键盘输入. Input 输入一个整数 Output 输出表达式的值 Sample Input 5 Sam ...

  8. 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...

  9. 用JS编写一个函数,返回数组中重复出现过的元素

    用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...

随机推荐

  1. day48-python爬虫学习三

    Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.他们两个最显着的差异如下: urllib2可以接受一个Request对象,并以此可以来设置一个URL的h ...

  2. kd-tree题目总结

    在竞赛中,kd-tree一般只用于平面,很少有高于二维的情况. 在随机情况下,kd-tree的复杂度为O(NlogN),但会被极端数据卡到平方级别. 总而言之,就是优美的暴力. 查询时,通过估价函数进 ...

  3. Vultr新用户充值优惠 – 最多充值100美元送100美元

    Vultr商家向来是搅局的,当初海外VPS商家被Linode一家独大的时候,由于VULTR商家进入市场进行相似产品的营销,使得目前我们看到海外主机商各种低价.当然这些说法也有些武断,但是肯定是有一定的 ...

  4. spring Onions and wine

    Before and after the cold dew, the air is drier and the "autumn dryness" is vulnerable. Nu ...

  5. eclipse调试远程tomcat

    1.设置tomcat远程调试端口 catalina.sh export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,susp ...

  6. 2018-2019-2 网络对抗技术 20165326 Exp3 免杀原理与实践

    免杀原理与实践 目录 知识点问答 实践内容 遇到的问题 心得体会 知识点 meterpreter免杀 基础问题回答 杀软是如何检测出恶意代码的? 特征码(基于签名):模式匹配,比对特征码库 启发式:通 ...

  7. [ 转 ] RESTful

    一.什么是RESTful 定义: REST全程是Representational State Transfer,表述性状态转移.它首次出现在2000年Roy Fielding的博士论文中,Roy Fi ...

  8. 安装linux虚拟机配置静态ip(桥接模式)

    1.centOs7.VMware Workstation14 2.常规新建虚拟机操作后,来到选择连接模式: 这里选择桥接模式,复制物理网络连接状态(就是把实际的主机网卡信息拷贝一份,让虚拟机也有一份和 ...

  9. 关于Java方法重载

    今天在做项目的时候发现一个问题,如果有两个方法是重载的,而且他们的参数一个是父类,一个是子类,那么调用的时候会调用哪个函数呢? 做了个测试,发现调用的是子类. 例子: public class Ani ...

  10. JavaScript Node节点笔记

    1. 节点及其类型: 1). 元素节点 2). 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 3). 文本节点: 是元素节点的子节点, 其内容为文本. 2. 在 html 文档的什么位置编 ...