zoukankan      html  css  js  c++  java
  • 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

    经过测试可以

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

  • 相关阅读:
    没有插件的sublime编辑器是没有灵魂的
    原生JS简单的无缝自动轮播
    自学前端的日子,记录我的秃头之旅
    简洁快速的数组去重
    最困难的是带着自己的选择生活下去
    css画图那些事
    css3画图那些事(三角形、圆形、梯形等)
    SVN那些事
    关于使用JQ scrollTop方法进行滚动定位
    linux下mysql出现Access denied for user 'root'@'localhost' (using password: YES)解决方法
  • 原文地址:https://www.cnblogs.com/nj0409/p/1986144.html
Copyright © 2011-2022 走看看