C#编写CLR函数
本案例在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函数的更多相关文章
- 编写CLR存储过程中使用SqlDataRecord
温习一下这些天学习的CLR编程,存储过程,函数. 编写CLR的存储过程,运行起来的效率,果然比普通的SQL语句,存储过程或是函数均高. 以后专案需求,或是执行效率较高的SQL,得写成CLR程序,再部署 ...
- 正则表达式 第六篇:调用CLR函数执行正则查询
在SQL Server数据库中可以执行模糊查询,像like子句,和全文查询(Fulltext search),但是无法直接执行正则查找,SQL Server没有执行正则表达式的内置函数,但是我们可以创 ...
- 不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数
不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数. 这是一道面试题,可以使用递归的方式解答,答案如下: #include <stdio.h> int mylen(cha ...
- c程序设计语言_习题1-16_自己编写getline()函数,接收整行字符串,并完整输出
Revise the main routine of the longest-line program so it will correctly print the length of arbitra ...
- H面试程序(1)编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的 下一秒
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒. 如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005年 1 月 1 日 0 时 0 分 0 秒. ...
- 第九十六题(编写strcpy 函数)
96.08 年中兴校园招聘笔试题 1.编写strcpy 函数 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 当中st ...
- 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数
Description 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数.n由键盘输入. Input 输入一个整数 Output 输出表达式的值 Sample Input 5 Sam ...
- 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...
- 用JS编写一个函数,返回数组中重复出现过的元素
用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...
随机推荐
- Mac搭建SVN服务器+Cornerstone连接服务器
Mac自带svn,我们只需配置并开启就可以了,打开终端,输入svnserve --version查看svn版本 可以看到我的mac自带的svn版本号为1.9.7,下面开始配置服务器: 1.终端输入su ...
- 前端开发面试题总结之——JAVASCRIPT(二)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...
- 记一次用express手写博客
1.req.session时一直是undefined 解决方法: // sesssion应用的配置 app.use(session({ secret:'blog', cookie: ('name', ...
- 浅析HashMap的实现原理
本文参照https://www.cnblogs.com/chengxiao/p/6059914.html#commentform作者的文章,并分享一些自己的体会. 本文将主要回答以下两个问题: 1. ...
- 泛型--增强for循环--数组和集合转换
1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 ...
- 本地存储localStorage sessionStorage 以及 session 和cookie的对比和使用
cookie和session都是用来跟踪浏览器用户身份的会话方式. 1.验证当前服务中继续请求数据时,哪些缓存数据会随着发往服务器? 只有cookie中设置的缓存数据会发送到服务器端 2. 强调几点: ...
- JavaWeb基础-Jsp内置对象
request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...
- django之CSRF
在POST请求到达views之前,csrf帮我们进行一层验证 <!DOCTYPE html> <html lang="en"> <head> & ...
- Observable详解
Observable详解 rxjs angular2 在介绍 Observable 之前,我们要先了解两个设计模式: Observer Pattern - (观察者模式) Iterator Patte ...