本案例在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. 发现sql注入的一些技巧

    1.如果一个'导致错误,试着查看\'能否成功(因为反斜杠在MySQL中取消了单引号)2.你也可以尝试注释掉,--',看页面返回是否正常.3.如果正常的输入只是一个整数,你可以尝试减去一些量,然后查看减 ...

  2. 互粉的sql查询

    建立表: CREATE TABLE `tb_sns_attention` ( `id` int(11) NOT NULL AUTO_INCREMENT, `to_uid` int(11) NOT NU ...

  3. C语言常见易错题集(分析及解答)(仅可用于交流,勿用于商业用途)

    1.能正确表示a和b同时为正或同时为负的逻辑表达式是( D  ). A.(a>=0||b>=0)&&(a<0||b<0)             B.(a> ...

  4. spring的bean创建过程

    Spring的bean创建过程 步骤 执行过程 描述 1 ThreadLocal.set bean创建之前将beanName的一些属性放进ThreadLocal,避免多线程创建bean导致问题,并发创 ...

  5. 凯撒密码移位python

    #!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...

  6. 4 扩展库Scipy

    https://www.scipy.org/ 1. numpy    矩阵 2. matplotlib 绘图库 3. pandas 高效的Series和DataFrame数据结构 4.5 ndarry ...

  7. c++数组传参

    最近感觉老是碰到数组传参的问题,特别是二维的数组,每次报错都感觉头疼,烦躁:这里必须总结一下了,先把暂时能解决的问题写在这吧,以便以后碰到查看! 先看一个一维数组传参:这样用数组传参是很不安全的:会输 ...

  8. eclipse起不起来web项目

    eclipse 启动java web项目tomcat无报错,但是项目没有启动成功,可能存在以下原因 1.Maven Dependecies 可能不存在 解决:点击Add将Maven Dependeci ...

  9. 基于centos6.5安装部署mongdb3.6

    注意:不同的版本的centos,mongdb安装方式不同,请注意版本号!! 基于centos6.5安装部署mongdb3.6 方式有多种,本文介绍使用wget命令来下载获取mongdb,具体命令如下 ...

  10. Maven中添加镜像

    Maven库在天朝的下载速度实在是感人,所以添加镜像之后速度会提升很多. 在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror <mirror> ...