`
yufeng521000
  • 浏览: 6608 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

最近做的一个HR项目需要同时支持两种数据库(Postgresql and Sqlserver 2014)
但是有一个问题困扰了我,就项目中需要在group 中去聚合一些字符串。

在postgresql 中可以使用内部函数string_agg(filedName, 分割符) 来实现,但是sqlserver 没有这种直接的聚合函数,但是sqlserver 2005以后就支持自定义聚合函数(适用C#进行编码)。
看看实现步骤吧:
1. 在visual studio 2013 中新建一个sqlserver项目。
2. 在新建的sqlserver项目上右键--添加--新项目,然后选择SQL CLR C# ---- SQL CLR C# 用户自定函数, 设置好文件名后点击右下角添加按钮。

3.编写C#代码,代码请参考附件String_agg.7z, 然后编译代码,编译之后会在工程目录obj\Debug生成一个SQL_STRING_AGG.dll 文件(sqlserver 项目名),然后把这个文件拷贝到D盘。(黄色的地方的盘符要一致)

4. 启动sqlserver,连接数据库之后,启动sqlserver 2014的CLR功能

    4.1 启动顺序如下:

          数据库实例右键--方面 会弹出一个窗口,在方面里面选择服务器配置---方面属性---                   clrIntegerationEnabled 设置成 true。(这个必须开启)

5. 执行以下两组sql,创建程序集和聚合函数。
CREATE ASSEMBLY [SQL_STRING_AGG] AUTHORIZATION [dbo]

FROM 'd:\SQL_STRING_AGG.dll'

WITH PERMISSION_SET = SAFE;

GO

 

CREATE AGGREGATE [dbo].[String_agg] (@FieldValue [nvarchar](4000), @Delimiter [nvarchar](4000))

RETURNS [nvarchar](4000)

EXTERNAL NAME [SQL_STRING_AGG].[String_agg];

GO

OK, 完成以上步骤就可以实现以下聚合功能了

表 person:

name            value
张三              12

张三              34

张三              56

张三              78

张三              90
select name, dbo.string_agg(value,',') as group_values from person group by name order name

输出:张三  |  12,34,56,,78,90

0
0
分享到:
评论

相关推荐

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

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

    自定义字符串聚合函数

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

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

    将字符串数据进行聚合,来实现 系统的sum(),count()等效果

    Sql Server 字符串聚合函数

    不过我们可以通过自定义函数的方式来解决这个问题。1.首先建立测试表,并插入测试数据: 代码如下:create table AggregationTable(Id int, [Name] varchar(10)) go insert into AggregationTable select 1,

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    8.6.2 用户定义聚合函数(UDA,User Defined Aggregate) 8.6.3 专用解决方案 8.7 直方图(Histogram) 8.8 分组因子 8.9 分组集 8.9.1 样例数据 8.9.2 GROUPING SETS从属子句 8.9.3 CUBE从属子句 8.9.4 ...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    8.6.2 用户定义聚合函数(UDA,User Defined Aggregate)362 8.6.3 专用解决方案370 8.7 直方图(Histogram)380 8.8 分组因子383 8.9 分组集385 8.9.1 样例数据386 8.9.2 GROUPING SETS从属子句387 8.9.3 CUBE从属...

    SQL2005入门到精通(11)

    239 11.5.1 在SQL Server Management Studio中删除用户定义函数 240 11.5.2 用DROP FUNCTION语句删除用户定义函数 240 11.6 常用系统函数 241 11.6.1 聚合函数 241 11.6.2 配置函数 242 11.6.3 ...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    8.6.2 用户定义聚合函数(UDA,User Defined Aggregate)362 8.6.3 专用解决方案370 8.7 直方图(Histogram)380 8.8 分组因子383 8.9 分组集385 8.9.1 样例数据386 8.9.2 GROUPING SETS从属子句387 8.9.3 ...

    C#开发经验技巧宝典

    0909 如何对字符串进行查询 532 0910 如何进行单条数据的添加 533 0911 如何进行批量数据的添加 533 0912 如何对数据进行修改 534 0913 如何对数据进行删除 534 0914 对数据库数据进行局部删除 534 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    关系型数据库管理系统之MySql学习总结

    文章目录数据库介绍MySql介绍添加数据导入数据查询数据内连接左外连接/右外连接子查询约束函数聚合函数分组函数数学函数字符串函数日期时间函数条件判断函数系统信息函数加密函数格式化函数自定义函数视图事务存储...

    C#编程经验技巧宝典

    76 <br>0111 计算字符串中子字符串出现的次数 76 <br>0112 获得字符串中大写字母的个数 77 <br>0113 获得某字符在字符串中最后出现的位置 78 <br>0114 如何找出字符串中某一字符的所有位置 78...

    C#程序开发范例宝典(第2版).part13

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part08

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

Global site tag (gtag.js) - Google Analytics