这个clr代码比较长,这里演示一下我可以实现的效果和个人评价,详细代码参考blog原文
http://blog.csdn.net/jinjazz/archive/2009/04/29/4138000.aspx----------
SQLServer数据导出到excel有很多种方法,比如dts、ssis、还可以用sql语句调用openrowset。我们这里开拓思路,用CLR来生成Excel文件,并且会考虑一些方便操作的细节。
下面我先演示一下我实现的效果,先看测试语句,我把一个48万条数据表一次性导出到了8个excel文件中。exec BulkCopyToXls 'select * from testTable','d:\test','testTable',-1/*
开始导出数据
文件d:\test\testTable.0.xls,共65534条,大小20,450,868字节
文件d:\test\testTable.1.xls,共65534条,大小20,101,773字节
文件d:\test\testTable.2.xls,共65534条,大小20,040,589字节
文件d:\test\testTable.3.xls,共65534条,大小19,948,925字节
文件d:\test\testTable.4.xls,共65534条,大小20,080,974字节
文件d:\test\testTable.5.xls,共65534条,大小20,056,737字节
文件d:\test\testTable.6.xls,共65534条,大小20,590,933字节
文件d:\test\testTable.7.xls,共26002条,大小8,419,533字节
导出数据完成
-------
共484740条数据,耗时23812ms
*/上面的BulkCopyToXls存储过程是自定的CLR存储过程。他有四个参数:第一个是sql语句用来获取数据集
第二个是文件保存的路径
第三个是结果集的名字,我们用它来给文件命名
第四个是限制单个文件可以保存多少条记录,小于等于0表示最多65534条。前三个参数没有什么特别,最后一个参数的设置可以让一个数据集分多个excel文件保存。比如传统excel的最大容量是65535条数据。我们这里参数设置为-1就表示导出达到这个数字之后自动写下一个文件。如果你设置了比如100,那么每导出100条就会自动写下一个文件。另外每个文件都可以输出字段名作为表头,所以单个文件最多容纳65534条数据。用微软公开的biff8格式通过二进制流生成excel,服务器无需安装excel组件,而且性能上不会比sql自带的功能差,48万多条数据,150M,用了24秒完成。详细的clr代码和部署代码参考blog
http://blog.csdn.net/jinjazz/archive/2009/04/29/4138000.aspx...省略数万字当这项技术掌握在我们自己手中的时候,就可以随心所欲的来根据自己的需求定制。比如,我可以不要根据序号来分批写入excel,而是根据某个字段的值(比如一个表有200个城市的8万条记录)来划分为n个文件,而这个修改只要调整一下DataReader的循环里面的代码就行了。