SQL Server2005杂谈(4):在SQL Server2005中按列连接字符串的三种方法
2009-02-21 10:22:27 来源:WEB开发网由于本例需要聚合字符串,而不是已经被序列化的类型,如int等,因此,需要实现IBinarySerialize接口来手动序列化。使用C#实现SQL Server聚合函数,也会受到字符串最大长度为8000的限制。
在编写完上述代码后,可以使用Visual Studio来部署(右向工程,在弹出菜单上选“部署”即可)。也可以使用SQL语句来部署。假设上面的程序生成的dll为MyAggregate.dll,可以使用下面的SQL语句来部署:
CREATEASSEMBLYMyAggFROM'D:testMyAggregate.dll'
CREATEAGGREGATEjoinstr(@inputnvarchar(200))RETURNSnvarchar(max)
EXTERNALNAMEMyAgg.joinstr
要注意的是,字符串类型需要用nvarchar,而不能用varchar。
第一条SQL语句是装载dll,第二条SQL语句是注册joinstr聚合函数(每一个C#类就是一个聚合函数)
在执行上面的SQL语句之前,需要将SQL Server2005的clr功能打开。如图9所示。
图9
如果想删除上面建立的聚合函数,可以使用如下的SQL语句:
dropaggregatejoinstr
在删除聚合函数后,可以将MyAggregate.dll卸载。
dropassemblyMyAgg
OK,现在可以使用joinstr来聚合字符串了。
这种方法虽然显示很“酷”,但却要求开发人员熟悉扩展聚合函数的开发方法,如果开发人员使有的不是微软的开发工具,如使用Java,恐怕这种方法就只能是空谈了(除非开发小组内有人会用微软的开发工具)。
当然,如果使用其他的数据库,如oracle、mysql,也是可以实现类似扩展函数的功能的,如oracle可以使用java来进行扩展。但这要求开发人员具有更高的素质。
以上介绍的三种方法仅供参考,至于采用哪种方法,可根据实际需要和具体情况而定。
系列文章:
SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL
SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用
SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
SQL Server2005杂谈(5):将聚合记录集逆时针和顺时针旋转90度
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接