WEB开发网
开发学院数据库MSSQL Server SQL Server2005杂谈(4):在SQL Server2005中按列... 阅读

SQL Server2005杂谈(4):在SQL Server2005中按列连接字符串的三种方法

 2009-02-21 10:22:27 来源:WEB开发网   
核心提示: 由于本例需要聚合字符串,而不是已经被序列化的类型,SQL Server2005杂谈(4):在SQL Server2005中按列连接字符串的三种方法(6),如int等,因此,以上介绍的三种方法仅供参考,至于采用哪种方法,需要实现IBinarySerialize接口来手动序列化,使用C#实现S

由于本例需要聚合字符串,而不是已经被序列化的类型,如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所示。

SQL Server2005杂谈(4):在SQL Server2005中按列连接字符串的三种方法

图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度

上一页  1 2 3 4 5 6 

Tags:SQL Server 杂谈

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接