• 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

    经过测试可以

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

  • 相关阅读:
    C#与JAVA平台RSA算法交互示例
    .NET_RSA加密全接触(重、难点解析)
    .NET和java的RSA互通,仅此而已
    数据库面试常问的一些基本概念
    亿级Web系统搭建——单机到分布式集群
    (译) JSON-RPC 2.0 规范(中文版)
    有趣的 Mysql 存储引擎
    zend opcache的最佳设置
    PHP注释的艺术——phpDoc规范
    说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
  • 原文地址:https://www.cnblogs.com/nj0409/p/1986144.html
Copyright © 2020-2023  润新知