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

    经过测试可以

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

  • 相关阅读:
    防止特殊html字符的问题(xxs攻击)方法
    asp.net 服务器Button控件使用(onclick和onclientclick使用)
    Asp:Button控件onclick事件无刷新页面提示消息
    动态添加Marquee标签,并动态赋值与属性
    asp.net 前台通过Eval()绑定动态显示样式
    asp.net 中json字符串转换
    近况
    C# fixed语句固定变量详解
    fixed说明
    Net架构必备工具列表
  • 原文地址:https://www.cnblogs.com/nj0409/p/1986144.html
Copyright © 2011-2022 走看看