CLR聚合是SQL Server 2005引入的另一新的.NET数据库对象类型。本质上,自定义聚合功能是处理查询过程中对聚合数据分组用法的一个扩展功能。SQL Server一直提供有我们可以在查询中使用的聚合功能,例如:MIN,MAX和SUM。自定义聚合功能使我们可以用自定义的聚合功能扩展原来的聚合功能。
CLR聚合是一个非常好用的功能,支持创建对CLR自定义类型的聚合函数。与原生聚合函数一样,自定义聚合支持你对一组数据执行计算并返回单个值的功能。在创建CLR聚合时,你需要提供执行聚合的功能逻辑。在本节中,你将看到怎样创建一个简单的聚合功能,计算一组数字的最大差值。
要使用Visual St……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
CLR聚合是SQL Server 2005引入的另一新的.NET数据库对象类型。本质上,自定义聚合功能是处理查询过程中对聚合数据分组用法的一个扩展功能。SQL Server一直提供有我们可以在查询中使用的聚合功能,例如:MIN,MAX和SUM。自定义聚合功能使我们可以用自定义的聚合功能扩展原来的聚合功能。CLR聚合是一个非常好用的功能,支持创建对CLR自定义类型的聚合函数。与原生聚合函数一样,自定义聚合支持你对一组数据执行计算并返回单个值的功能。在创建CLR聚合时,你需要提供执行聚合的功能逻辑。在本节中,你将看到怎样创建一个简单的聚合功能,计算一组数字的最大差值。
要使用Visual Studio 2005创建聚合功能,你要点击“新建|项目”选项,指定项目名称,然后点击“确定”创建项目。本例中使用的名称为“MaxVariance”。在给项目命名,点击确定之后,使用你需要的连接配置完成“新建数据库引用”对话框,指向你的SQL Server服务器和数据库。接下来,为了创建聚合功能,我点击“项目|添加聚合”选项,显示“添加新项目”对话框。如图3-12所示:
图3-12:创建CLR聚合功能
在SQL Server模板列表中选择“聚合Aggregate”,然后输入类名,点击“确定”。如图3-12所示:我使用的名称是“MaxVariance”。Visual Studio会给聚合类生产启动项目。与自定义类型相似,SQL Server CLR聚合功能模板实现了SQL Server 2005对所有CLR聚合功能需要的四个方法。这四个必须实现的方法都列举在了下表3-3中。
表3-3:必须实现的聚合功能方法
你可以看到实现“MaxVariance”聚合功能的代码。如下所示:
Imports System Imports System.Data Imports System.Data.Sql Imports System.Data.SqlTypes Imports Microsoft.SqlServer.Server _ _ Public Structure MaxVariance Public Sub Init() m_LowValue = 999999999 m_HighValue = -999999999 End Sub Public Sub Accumulate(ByVal value As Integer) If (value > m_HighValue) m_HighValue = value End If If (value < m_LowValue) m_LowValue = value End If End Sub Public Sub Merge(ByVal Group as MaxVariance) If (Group.GetHighValue() > m_HighValue) m_HighValue = Group.GetHighValue() End If If (Group.GetLowValue() < m_LowValue) m_LowValue = Group.GetLowValue() End If End Sub Public Function Terminate() As Integer return m_HighValue - m_LowValue End Function ' Helper methods Private Function GetLowValue() As Integer return m_LowValue End Function Private Function GetHighValue() As Integer return m_HighValue End Function ' This is a place-holder field member Private m_LowValue As Integer Private m_HighValue As Integer End Structure |
在这段代码的顶部,你可以看到标准的导入语句集,它们都是CLR对象需要使用的,下面是CLR聚合功能对象需要使用的序列化属性。在那些代码后面,在“Init”方法内有两个参数,“m_LowValue”和“m_HighValue”,分别被赋予高值和低值,确保它们从列表中得到赋值。这两个变量是在代码中靠近底部的位置声明的,它们用来保存聚合程序遇到的最小值和最大值。“Init”方法只被调用一次,就是在对象第一次初始化的时候被调用。
虽然“Init”方法只被调用一次,但“Accumulate”方法会对结果集中的每一行调用一次。在本例中,“Accumulate”方法把新值与存储在“m_HighValue”和“m_LowValue”中的值相比较。如果新值比当前较高的值更大,就把新值存储在“m_HighValue”变量中。如果该新值比“m_LowValue”的值要小,就把该值存储在“m_LowValue”变量中。
“Merge”方法用在聚合功能并行处理的情况,一般大部分查询都不是如此。如果“Merge”方法被调用,它的任务是从并行实例中导入当前聚合功能值。在本例中你可以看到,它使用两个帮助函数(本质就就是导出“m_HighValue”和“m_LowValue”变量的值)来做到这一点。
“Terminate”方法在所有结果被处理完之后调用一次。在本例中,“Terminate”方法简单地把找到的最大值减去找到的最小值,把它们的差值返回给调用者。
作者
翻译
TechTarget特邀编辑。2003年入软件行业,熟悉软件过程所有环节,对机构信息化的各方面有深入理解和实践经验。现就职于某互联网创业公司,目前关注互联网分布式系统架构和机器学习。喜欢传统文化社科哲学(尤喜《周易》、《老子》),喜健身喜抓举(具备抱人引体向上的能力),喜欢中国象棋(具备盲棋1对2的能力)。
相关推荐
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。
-
Notre Dame对云端SQL Server性能基准的探索实践
确立SQL Server的性能基准,对于云端迁移来说是至关重要的第一步,一位来自于University of Notre Dame 的DBA表示,他正在试图通过数据库监控软件,找出SQL server的性能基准。
-
横向扩展SQL Server应用程序:提高工作负载的选项
SQL Server管理员面临的最大挑战之一就是扩展数据库以适应更为繁重的数据处理工作负载。然而事情越发复杂的是,虽然Microsoft提供了许多不同的SQL Server可扩展性选项,但它们并不都适合于每种情况。
-
五大技巧构建首个SQL Server容器
容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。