C# 自定义sqlserver表值函数

来源:互联网 发布:讯鸟软件 骗局 编辑:程序博客网 时间:2024/06/03 13:31

首先普及一下什么是表值函数,我是说个人理解啊,就是传进去一个参数或者不传参数,返回一个列表的函数,这个是通俗一点的说法,官方解释Sql server 的表值函数是返回一个Table类型,table类型相当与一张存储在内存中的一张虚拟表 下面说做法。

1,首先新建一个 C# CLR 数据库项目

2,在里面新建用户自定义函数文件,其实就是一个类

这里可以直接右键生成和部署,这里要注意了,选择 net的版本,注意C# 参数的类型是否和数据库类型匹配。

 

因为是表值函数,所以首先要声明字段,这里注意,我是把Participle 类声明在 UserDefinedFunctions 类当中. 声明完了 就要返回    接着是自己的业务逻辑

 

下面是业务类的简单写法,

[SqlFunction(DataAccess = DataAccessKind.Read, FillRowMethodName = "ParticipleFunt_FillRow", TableDefinition = "ContentId nvarchar(400), Content nvarchar(400),Sort int")]    public static IEnumerable ParticipleFunt(SqlString modified)    {        ArrayList resultCollection = new ArrayList();        string [] strmodified = modified.ToString().Split('\r');        for (int i = 0; i < strmodified.Length; i++)        {           resultCollection.Add(new Participle((i+1).ToString(),strmodified[i], i+1));         }        return resultCollection;    }


解释一下上面的特性 (DataAccessKind.Read 描述用户定义的方法或函数所使用的用户数据访问类型),(FillRowMethodName = "ParticipleFunt_FillRow", 指明返回函数)(TableDefinition = "ContentId nvarchar(400), Content nvarchar(400),Sort int“ 表示返回的列,这里一定要注意哦,c# 的字段类型一定要和 sqlserver 的字段类型匹配,要不程序一直报错,建议打开调试里面的输出,能看到时时编译的错误)

 

做完上面的就可以右键生成和部署了, 生成很简单,部署也很简单,都是点击项目,然后在右键菜单里面。

最后再说几句,因为是表值函数,所以我们自定义的时候返回表结构用的是 IEnumerable 

最后测试语句用的是 select * from dbo.ParticipleFunt( 参数/null);

以上是C#编写表值函数的所有做法。

原创粉丝点击