欢迎来到天天文库
浏览记录
ID:22378308
大小:64.00 KB
页数:7页
时间:2018-10-28
《sqlclr(五)聚合--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、SQLCLR(五)聚合>> SQLServer中的聚合,常用的比如max,count之类。我们现在也可以在SQLCLR里创建自定义的聚合。VisualStudio2005中提供的聚合模板是一个结构,标注了[Serializable],[SqlUserDefinedAggregate]标签,这将让SQLCLR知道这是一个聚合函数。 看一段代码,这段代码来自SQLServer2005联机丛书,本来自己想写一段,但突然公司有些事要做,没时间了。示例代码作用是合并同一部书(ID相同)的。usingSystem;usingSystem.Data;usingMicrosoft.SqlS
2、erver.Server;usingSystem.Data.SqlTypes;usingSystem.IO;usingSystem.Text;[Serializable][SqlUserDefinedAggregate( Format.UserDefined,//useclrserializationtoserializetheintermediateresult IsInvariantToNulls=true,//optimizerproperty IsInvariantToDuplicates=false,//optimizerproperty IsInva
3、riantToOrder=false,//optimizerproperty MaxByteSize=8000)//maximumsizeinbytesofpersistedvalue]publicclassConcatenate:IBinarySerialize{ /**////<summary> ///Thevariablethatholdstheintermediateresultoftheconcatenation ///</summary> privateStringBuilderintermediateResult;
4、/**////<summary> ///Initializetheinternaldatastructures ///</summary> publicvoidInit() { this.intermediateResult=nemary> ///Accumulatethenextvalue,notifthevalueisnull ///</summary> ///<paramname=value></param> publicvoidAccumulate(SqlStr
5、ingvalue) { if(value.IsNull) { return; } this.intermediateResult.Append(value.Value).Append(','); } /**////<summary> ///Mergethepartiallyputedaggregatemary> ///<paramname=other></param> publicvoidMerge(Concatenateothe
6、r) { this.intermediateResult.Append(other.intermediateResult); } /**////<summary> ///Calledattheendofaggregation,toreturntheresultsoftheaggregation. ///</summary> ///<returns></returns> publicSqlStringTerminate() { stringoutput=string.Empty
7、; //deletethetrailingma,ifany if(this.intermediateResult!=null this.intermediateResult.Length>0) { output=this.intermediateResult.ToString(0,this.intermediateResult.Length-1); } returnneediateRes
此文档下载收益归作者所有