大数据EXCEL高效导出

 最近碰到要导出大数据的EXCEL, 发现用ADO.NET导出特别慢,所以就写了个存储过程直接用数据库来导出. 下面是代码:

 

但是这样导出的EXCEL文件是没有什么样式的EXCEL文件,而且只支持本地导出(WEB服务器和数据库服务器是在同一台机器上)~.....  在存储过程里面都有注释,其实也蛮简单的,主要是用到了网上很容易搜索到的BCP命令~ 用xp_cmdshell  执行它而已.

  1. create procedure procGenexcelwithcolumns  
  2. (  
  3.  @db_name varchar(100),  
  4.  @table_name varchar(100),   
  5.  @file_name varchar(100)  
  6. )  
  7. as  
  8.   
  9. --Generate column names as a recordset  
  10. declare @columns varchar(8000), @sql varchar(8000), @data_file varchar(100)  
  11. select   
  12.  @columns=coalesce(@columns+',','')+column_name+' as ['+column_name+']'   
  13. from   
  14.  information_schema.columns  
  15. where   
  16.  table_name=@table_name  
  17. select @columns=''''''+replace(replace(@columns,' as ',''''' as '),',',',''''')  
  18.   
  19. --Create a dummy file to have actual data  
  20. select @data_file=substring(@file_name,1,len(@file_name)-charindex('/',reverse(@file_name)))+'/data_file.xls'  
  21.   
  22. --Generate column names in the passed EXCEL file  
  23. set @sql='exec master..xp_cmdshell ''bcp " select * from (select '+@columns+') as t" queryout "'+@file_name+'" -c -q -S"192.168.1.2" -U"sa" -P"sasasa"'''  
  24. exec(@sql)  
  25. -- From 飞鸟工作室  Rights reserved
  26. --Generate data in the dummy file  
  27. set @sql='exec master..xp_cmdshell ''bcp "select * from '+@db_name+'..'+@table_name+'" queryout "'+@data_file+'" -c -q -S"192.168.1.2" -U"sa" -P"sasasa"'''  
  28. exec(@sql)  
  29.   
  30. --Copy dummy file to passed EXCEL file  
  31. set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> '+@file_name+''''  
  32. exec(@sql)  
  33.   
  34. --Delete dummy file   
  35. set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''  
  36. exec(@sql)
  37. -- From 飞鸟工作室  Rights reserved

调用实例:

procGenexcelwithcolumns    'test','vitemsoldreport','d:/itemsold.xls'

 

test:数据库名,'vitemsoldReport'视图名',itemsold.xls 是路径

注意:数据量不能超过EXCEL每张SHEET能承受的最大行数:65536

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章