CLR聚合是SQL Server 2005引入的另一新的.NET数据库对象类型。本质上,自定义聚合功能是处理查询过程中对聚合数据分组用法的一个扩展功能。SQL Server一直提供有我们可以在查询中使用的聚合功能,例如:MIN,MAX和SUM。自定义聚合功能使我们可以用自定义的聚合功能扩展原来的聚合功能。
CLR聚合是一个非常好用的功能,支持创建对CLR自定义类型的聚合函数。与原生聚合函数一样,自定义聚合支持你对一组数据执行计算并返回单个值的功能。在创建CLR聚合时,你需要提供执行聚合的功能逻辑。在本节中,你将看到怎样创建一个简单的聚合功能,计算一组数字的最大差值。
要使用Visual St……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
![TechTarget微信公众号二维码](/wp-content/uploads/res/images/spriteimg/ttweixin.jpg)
TechTarget
官方微博
![TechTarget中国官方微博二维码](/wp-content/uploads/res/images/spriteimg/ttweibo.jpg)
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”方法简单地把找到的最大值减去找到的最小值,把它们的差值返回给调用者。
作者
翻译
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。