--
--9.7.1节示例
--
//创建元音字母计数聚合函数
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;
//以下Attribute标明结构体CountVowels是可序列化的,而且被用于用户定义CLR聚合函数
[Serializable]
[SqlUserDefinedAggregate(Format.Native)]
//定义结构体CountVowels
public struct CountVowels
{
private int countOfVowels;
public void Init() //初始化函数
{
countOfVowels = 0;
}
//以下函数定义了聚合函数的具体聚合操作
public void Accumulate(SqlString value)
{
char[] vowels = "aeiou".ToCharArray();//获得元音数组
char[] strs = value.Value.ToLower().ToCharArray();//将传入的参数转换为小写的字符数组
for (int i = 0; i < strs.Length; i++)//对于传入参数字符数组的每一个字符循环操作
{
for (int j = 0; j < vowels.Length; j++)//对每一个元音字母都进行匹配
{
if (strs[i] == vowels[j]) //如果匹配,则元音总数加1
{
countOfVowels += 1;
}
}
}
}
//定义合并函数,将元音数相加
public void Merge(CountVowels value)
{
countOfVowels += value.countOfVowels;
}
//定义结束函数,返回元音总数值
public SqlInt32 Terminate()
{
return new SqlInt32( countOfVowels);
}
}
--
--9.7.2节示例
--
--创建用户定义聚合函数
CREATE AGGREGATE CountVowels(@input nvarchar(4000)) --创建用户定义聚合函数
RETURNS int
EXTERNAL NAME [TestSQLAssembly].CountVowels --指定聚合函数在程序集中的位置
--使用用户定义聚合函数查询数据
SELECT City,count(City) AS PersonCount,dbo.CountVowels(City) AS CityVowelsCount
FROM Person.Address
GROUP BY City