`
yizhilong28
  • 浏览: 232965 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

自定义聚合函数

阅读更多
下载安装vs2005
下载地址:http://www.52z.com/soft/7658.html
新建database Project
新建Concatenate class
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.IO;
using System.Text;

[Serializable]
[SqlUserDefinedAggregate(
    Format.UserDefined, //use clr 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
]
public class Concatenate : IBinarySerialize
{
    /// <summary>
    /// The variable that holds the intermediate result of the concatenation
    /// </summary>
    private StringBuilder intermediateResult;

    /// <summary>
    /// Initialize the internal data structures
    /// </summary>
    public void Init()
    {
        this.intermediateResult = new StringBuilder();
    }

    /// <summary>
    /// Accumulate the next value, not if the value is null
    /// </summary>
    /// <param name="value"></param>
    public void Accumulate(SqlString value)
    {
        if (value.IsNull)
        {
            return;
        }

        this.intermediateResult.Append(value.Value).Append(',');
    }

    /// <summary>
    /// Merge the partially computed aggregate with this aggregate.
    /// </summary>
    /// <param name="other"></param>
    public void Merge(Concatenate other)
    {
        this.intermediateResult.Append(other.intermediateResult);
    }

    /// <summary>
    /// Called at the end of aggregation, to return the results of the aggregation.
    /// </summary>
    /// <returns></returns>
    public SqlString Terminate()
    {
        string output = string.Empty;
 
        if (this.intermediateResult != null && this.intermediateResult.Length > 0)
        {
            output = this.intermediateResult.ToString(0, this.intermediateResult.Length - 1);
        }

        return new SqlString(output);
    }

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

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


编译 Concatenate class

注册aggregate.dll'

CREATE ASSEMBLY MyAgg FROM 'C:\aggregate.dll'
GO
CREATE AGGREGATE MyAgg (@input nvarchar(200)) RETURNS nvarchar(max)
EXTERNAL NAME MyAgg.Concatenate

其中:
第一个、第三个MyAgg 是程序集名称
Concatenate是类名
第二个MyAgg是聚合函数名称
Concatenate为类名


如果注册失败或执行前失败(禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项 ),先执行以下sql

exec sp_configure 'show advanced options', '1';
go
reconfigure;
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go

删除注册
drop AGGREGATE MyAgg
然后到程序集中将其删除
  • 大小: 4.5 KB
分享到:
评论

相关推荐

    Oracle自定义聚合函数-分析函数

    Oracle 自定义聚合函数-分析函数 Oracle 自定义聚合函数是一种强大且灵活的功能,允许用户根据自己的需求创建自定义的聚合函数。聚合函数是一种特殊的函数,它可以对一组数据进行处理和计算,并返回一个结果。 ...

    自定义聚合函数:用户定义的聚合函数——评估SQL Server 2005中的新功能.pdf

    第一个例子是构建一个自定义聚合函数,用于连接并返回每个客户的订单ID列表,这些ID按顺序以逗号分隔。第二个任务是聚合与每个客户相关的不同员工ID。这两个任务演示了如何利用UDA解决SQL Server内置函数无法直接...

    SqlServer自定义多参数聚合函数实例代码

    然而,SQL Server的标准内置聚合函数可能无法满足所有复杂的数据处理需求,这时我们就需要自定义聚合函数。标题提到的"SqlServer自定义多参数聚合函数实例代码"就是针对这种情况提供的一种解决方案。 自定义聚合...

    Oracle10g自定义聚合函数(字符串拼接)

    * 自定义聚合函数 wmsys.wm_concat 替换办法 * 超大字符串拼接,单个字符串4000、分隔符100,可拼出超4000的超长字符串 * 可自定义指定分隔符separator * 可自定义指定排序字段sequence,对于数字或日期类型的...

    Sqlserver 2014 之 自定义字符串聚合函数

    例如,文件“String_agg.cs”很可能包含了创建自定义聚合函数的C#代码。在SQL Server中,我们可以使用CLR(Common Language Runtime)集成来编写UDAs,这允许使用.NET Framework的任何语言(如C#或VB.NET)来创建...

    SQLServer自定义字符串聚合函数DLL文件(可直接使用)

    http://yufeng521000.iteye.com/blog/2076607; 根据这篇BOLG的函数编译的DLL,方便大家直接使用; 里面有两个DLL分别是NET3.5,以及NET4.0,下载后根据BOLG以及数据库版本选择对应的DLL使用;

    使用IDEA编写SparkSql自定义聚合函数——强类型Dataset(求平均值)

    "avg_age")// 加载数据val jsonDF: DataFrame = spark.read.json("src/main/resources/data.json")// 定义数据集val userDS: Dataset[UserBean] = jsonDF.as[UserBean]// 运行自定义聚合函数,计算平均年龄val ...

    SqlServer自定义字符聚合

    标题“SqlSserver自定义字符聚合”所指向的知识点主要是关于如何在SQL Server中创建和使用自定义聚合函数,特别是在处理字符串数据时的特殊需求。自定义字符聚合允许开发者根据业务需求定制特定的聚合逻辑,比如实现...

    Python自定义聚合函数merge与transform区别详解

    1.自定义聚合函数,结合agg使用 2. 同时使用多个聚合函数 3. 指定某一列使用某些聚合函数 4.merge与transform使用 import pandas as pd import numpy as np np.random.seed(1) dict_data = { 'k1': ['a', 'b', ...

    [] - 2022-07-18 60种特征工程操作:使用自定义聚合函数.pdf

    kaggle竞赛宝典,机器学习,人工智能咨询,kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle竞赛宝典,机器学习,人工智能咨询kaggle...

    C#扩展SQLServer 2005 字符串聚合函数

    创建自定义聚合函数的步骤如下: 1. **设计C#类**:首先,需要在C#中编写一个类,该类需要继承`System.Data.SqlTypes.SqlAggregate`基类,并实现必要的方法,如`Accumulate()`、`Terminate()`和`GetResult()`。这些...

    自定义字符串聚合函数

    sql server 的聚合函数如 sum() count() 等只能对数字类型的数据进行聚合, 而对于字符串 却是不能的,朋友从网上找了相似的案例 经修改后 做了一下总结, 希望对大家有用!!

    【SparkSql篇02】SparkSql之自定义UDF和UDAF函数1

    例如,我们可能需要计算 `price` 列的平均值,而内置的 `avg()` 函数无法满足特定需求时,可以自定义聚合函数。 1. **创建自定义聚合函数** 自定义聚合函数需要继承 `UserDefinedAggregateFunction` 类。这个类...

    SQL CLR聚合函数在环境质量业务数据计算中的应用.pdf

    SQL CLR聚合函数是基于SQL Server 2005引入的SQL CLR编程技术开发的自定义聚合函数。这项技术允许开发者使用.NET框架编程语言(如C#或***)编写聚合逻辑,并在SQL Server中以CLR函数的形式进行部署和执行。这种聚合...

    类似于wmsys.wm_concat的自定义函数clob版

    创建自定义聚合函数的步骤大致如下: 1. **创建类型**:首先,你需要创建一个PL/SQL记录类型,该类型可以存储你要聚合的列的数据。 2. **创建聚合状态类型**:这是一个PL/SQL类型的变量,用于在聚合过程中存储中间...

    sql自定义函数 sql自定义函数

    4. **聚合函数(Aggregate Function)**:对一组值进行操作并返回单一结果,如SUM、AVG、COUNT等。 5. **窗口函数(Window Function)**:在结果集的一组行(窗口)上执行计算,例如RANK、LEAD、LAG等。 ### 二、...

    嵌入式数据库简介-SQLite

    SQLite介绍 SQLite的发展 SQLite的优势 SQLite的缺憾 SQLite...自定义聚合函数 自定义排序函数 PERL接口 SQLite数据库在ASTRAL中的应用 SQLite在多级关联中的应用 SQLite在IPIS中的应用 ...

    SQL自定义函数讲解

    SQL函数主要分为三类:系统函数、用户自定义函数(UDF)和聚合函数。系统函数是SQL服务器预先定义好的,如数学函数、日期和时间函数、字符串函数等,它们提供了一种标准的方式来处理特定的数据类型或执行特定的操作...

Global site tag (gtag.js) - Google Analytics