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

摘要:
内部函数字符串可以在postgresql_agg中使用,但sqlserver没有这样的直接聚合函数。但是,自2005年以来,sqlserver支持用户定义的聚合函数。

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

免责声明:文章转载自《Sqlserver 2014 之 自定义字符串聚合函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用java调用oracle存储过程总结(转)各平台操作系统查询主机WWPN下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

通过wireshark获取应用接口并使用爬虫爬取网站数据(二)

接上文 找到接口之后连续查看了几个图片,结果发现图片都很小,于是用手机下载了一个用wireshark查看了一下url 之前接口的是 imges_min下载的时候变成了images soga,知道之后立马试了一下 果然有效, 但是总不能一个一个的查看下载吧 于是连夜写了个java爬虫 下面是代码 packagecom.feng.main; importj...

Ext Js简单Grid创建使用及AJAX处理

在使用Ext Js对于Grid组件使用必不可少的,对于它的掌握也是需要的。简单贴一些代码,看看Grid的创建使用,就不细讲每一步了,代码注释还可以,不明白的可以在评论中写一下,或发邮件给我,一定帮助解答,欢迎交流。1.简单Ext JsGrid的创建使用(创建Ext.grid.GridPanel需要store(proxy\reader)\colModel)...

spark学习笔记-java调用spark简单demo

开发环境:         win10+idea+jdk1.8+scala2.12.4 具体步骤: 编写scala测试类 object MyTest { def main(args: Array[String]): Unit = { val conf = new SparkConf() conf.setAppName("MyTest"...

C#各种辅助类收集(CSharpCommonHelper)

1.IOHelper(FileHelper) 2.XmlHelper 3.DBHelper 4.IISHelper 5.OSHelper(WindowsHelper) 6.SqlserverHelper View Code usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; us...

DEV控件GridControl常用属性设置(转)

1、 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2、 如何新增一条记录 (1)、gridView.AddNewRow() (2)、实现 gridView_InitNewRow 事件 3、如何解决 GridControl 记录能获取而没有显示出来的问题 gri...

JQuery几种动画效果的方法

下面介绍了几种动画效果的方法,具体如下: 1、show()显示效果 语法:show(speed,callback)  Number/String,Function speend为动画执行时间,单位为毫秒。也可以为slow","normal","fast" callback可选,为当动画完成时执行的函数。 show(speed,[easing],callba...