VS2010 与 SQL2005 聚合函数用法

工作中无意间会遇到问题,今天遇到一个数据整合的问题,正好今天不算太忙,就小试了一下 VS2010 SQL 中的聚合函数,直接说需求吧

原本的数据是
ID   Name
1     张三
1     李四
2     王五
3     试试
3     得到
3     大
最后 结果数据

ID    Name
1     张三;李四;
2     王五;
3     试试;得到;大;

 

首先在 vs2010 中创建一个 的数据库 SQL CLR 数据库项目

弹出一个选择数据连接的对话框直接点击添加引用

选择自己的数据库后会在右边解决方案中生成一些相关的JS和文件

右击项目选择添加一个聚合函数

添加好聚合函数类之后

修改代码

把原有的

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.Native)]

替换成 (具体的目前我也在看)

[Serializable]
[SqlUserDefinedAggregate(
    Format.UserDefined, 
//use custom serialization to serialize the intermediate result
    IsInvariantToNulls = true//optimizer property
    IsInvariantToDuplicates = false//optimizer property
    IsInvariantToOrder = false//optimizer property    
    MaxByteSize = 8000//maximum size in bytes of persisted value
]

生成的类没有继承  : IBinarySerialize

剩下的代码如下

 private System.Text.StringBuilder intermediateResult;

    
public void Init()
    {
        intermediateResult 
= new System.Text.StringBuilder();
    }

    
public void Accumulate(SqlString Value)
    {
        intermediateResult.Append(Value.Value 
+ ";"); // 此处可以自己随便修改
    }

    
public void Merge(Aggregate1 Group)
    {
        intermediateResult.Append(Group.intermediateResult);
    }

    
public SqlString Terminate()
    {
        
return new SqlString(intermediateResult.ToString());
    }
    #region IBinarySerialize 成员

    
public void Read(System.IO.BinaryReader r)
    {
        intermediateResult 
= new StringBuilder(r.ReadString());
    }

    
public void Write(System.IO.BinaryWriter w)
    {
        w.Write(
this.intermediateResult.ToString());
    }

    
#endregion

这样我的聚合函数就写好了,剩下的就是部署了,vs中提供了部署,头一次部署老会出现问题,经过几次总结出

右击项目选择属性 选择应用程序,目标框架一定要修改为3.5的

最后在部署一下 这样聚合函数就完成

接下来就可以直接在SQL中写入

select id,数据库名称.dbo.StringJoin(name) from 表名 group by id

经过测试可以

 

都一次写这样的博客,如有错误见谅.....

 

 

posted @ 2011-03-16 15:56  80' 开发  阅读(572)  评论(1编辑  收藏  举报