MS SQL Server中的自定义聚合函数?

Ram*_*oni 12 database sql-server

如何在MS SQL Server中创建自定义聚合函数?一个例子会有很大帮助.

Joe*_*orn 1

SQL Server 2000 并不正式支持自定义聚合函数。但是,我最近也需要该功能,我发现这篇文章很有启发性:
http://weblogs.sqlteam.com/jeffs/articles/1490.aspx

不过,这有点黑客行为:它需要访问sp_OA___扩展过程。

总之,您可以使用一系列四个包装函数来模拟聚合函数,每个包装函数执行以下任务之一:

  1. 创建一个可以在查询中保存状态的 ActiveX 对象。在运行查询 之前调用此函数。
    • 使用 ActiveX 对象进行实际聚合。
    • 清除 GROUP BY 边界上的 ActiveX 对象状态
    • 摧毁该物体。在运行查询和错误处理期间调用此函数。

然后,您将项目 23 包含在查询的选择列表中,并且项目 2 还必须包装在现有的无效聚合函数(例如 MAX() 或 MIN())中。您还可以将此技术用于累积函数来执行行号等操作。

一些评论表明优化器可能会尝试通过在某些情况下优化掉调用来消除聚合效应,尽管我预计这确实是一种非常罕见的情况。然而,我发现了这个问题,因为我足够认真地对待这些警告,以继续寻找更好的东西。