用C自定义聚合函数

用C自定义聚合函数

ID:41489765

大小:60.70 KB

页数:7页

时间:2019-08-26

用C自定义聚合函数_第1页
用C自定义聚合函数_第2页
用C自定义聚合函数_第3页
用C自定义聚合函数_第4页
用C自定义聚合函数_第5页
资源描述:

《用C自定义聚合函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在SQL中,经常需要对数据按组进行白定义的聚合操作,比如用逗号连接一系列表示ID的数字,但默认只有SUM,MAX,MIN,AVG等聚合函数。在SQLServer2005中提供了编写CLR的托管代码的支持,我们可以用來写自定义的聚合函数。比如对于如下数据:AgeName20张三I-21李四I-20王二I-22赵五I-18钱六我们想得到AgNamee18钱六20张三,王二21李四22赵五需要实现一个聚合函数StrJoin,其功能是用逗号连接字符串。预期的SQL语句如下:selectAge,dbo.StrJoin(Name)asNamefr

2、omSomeTable耍实现这个函数,用VisualStudio2005建立一个C#的Database项项冃模版选择SQLServer数据库。在项目管理器里添加一个Aggregate后,输入代码如下:usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Data.SqlTypes;usingMicrosoft.SqIServer.Server;usingSystem.Text;[Serializable][Microsoft.SqlServer.Serv

3、er.SqlUserDefinedAggregate(Format.UserDefined,lslnvariantToDuplicates=false,IsInvariantToNulls=true,IslnvariantToOrder二false,lsNulllfEmpty=true5MaxByteSize=8000)]publicstructStrJoin:IBinarySerialize{privateStringBuilder_result;publicvoidlnit(){_result=newStringBuilder()

4、;}publicvoidAccumulate(SqlStringValue){if(Value.lsNull){return;}else{if(_resuIt.Length>0)_result.Append(H,f,);_result.Append(Value.Value);}}publicvoidMerge(StrJoinGroup){_result.Append(Group._result);publicSqIStringTerminate(){if(_result.Length>0){returnnewSqIString(_re

5、sult.ToString());}returnnewSqIString(””);#regionIBinarySerializeMemberspublicvoidRead(SystenrlO.BinaryReaderr){_result=newStringBuilder(r.ReadString());publicvoidWrite(System.lO.BinaryWriterw){w.Write(_result.ToString());#endregion}这里不叙述详细的操作步骤,网上应该可以搜到很多。其原理是该类中提供了几个模版

6、方法:lnit(),Accumulate(),Merge(),Terminate().我们需要做的是在其屮写自己的聚合逻辑即可。这几个方法的含义分别是初始化,扫描到一条记录时,合并,终止扫描。需要注意以下几点:1.自定义聚集函数中,我们返回的数据会被序列化然后转换到SQLServer中,对一些数值类型Framework提供了默认的序列化机制,但其他一些CLR的类型比如string就必须自己实现序列化机制,也就是实现IBinarySerialize接口。2.返回值和SQLServer里定义的变量一样,受到8000字节的长度限制。3.SQ

7、LServer2005必须设置兼容性级别为"SQLServer2005(90)",否则会出现如下错误:•EXTERNAL*附近有语法错误。您可能需要将当前数据库的兼容级別设置为更高的值,以启用此功能。有关存储过程sp.dbcmptlevel的信息,请参见帮助。4.需要开启SQLServer2005对CLR的支持(如果没有打开的话)。执行如下命令:EXECsp_configure*clrenabled*,1RECONFIGUREWITHOVERRIDEGOSQLServer字符串连接聚合函数.i.注册程序集:^WvSqlStrConca

8、te.dll,/S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。