大數據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

 

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