CREATE proc sqlToMultiExcelFile @sqlstr nvarchar(4000), --查询语句,如果查询语句中使用了order by ,请加上top 100 percent @primaryKey varchar(100),--分页主键字段 @path nvarchar(1000), --文件存放目录 @fname nvarchar(250), --文件名 @sheetname varchar(250)='sheet1' --要创建的工作表名,默认为文件名 as set nocount on declare @err int,@src nvarchar(255),@out int,@desc nvarchar(255),@sheetCount int,@i int,@topCount int,@where varchar(1000),@from varchar(1000),@myWhere varchar(1000),@filename varchar(250) declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000),@totalCount int,@pageCount int create table #tbMemory ( recId int identity(1,1) primary key, primaryKey varchar(50) ) create table #pageTb(totalCount int) set @from=substring(@sqlstr,charindex('from',@sqlstr)+5,len(@sqlstr)-charindex('from',@sqlstr)+1) if charindex('where',@sqlstr)>0 set @where=substring(@sqlstr,charindex('where',@sqlstr)+6,len(@sqlstr)-charindex('where',@sqlstr)+1) else set @where='' set @pageCount=65000 set @sql='select count(*) from ('+@sqlStr+') a' insert into #pageTb execute (@sql) select @totalCount=totalCount from #pageTb insert into #tbMemory execute('select top '+@totalCount+' '+@primaryKey+' from '+@from) --得出要导出的sheet数量 if @totalCount>@pageCount set @sheetCount=@totalCount/@pageCount+1 else set @sheetCount=1 --参数检测 if isnull(@fname,'')='' set @fname='temp.xls' if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') --检查文件是否已经存在 if right(@path,1)<>'/' set @path=@path+'/' create table #tb(a bit,b bit,c bit) --创建表的SQL declare @tbname sysname set @tbname='##tmp_'+convert(varchar(38),newid()) set @sql='select top 1 * into ['+@tbname+'] from('+@sqlstr+') a' --print @sql exec(@sql) select @sql='',@fdlist='' select @fdlist=@fdlist+',['+a.name +']' ,@sql=@sql+',['+a.name+'] ' +case when b.name in('char','nchar','varchar','nvarchar') then 'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')' when b.name in('tynyint','int','bigint','tinyint') then 'int' when b.name in('smalldatetime','datetime') then 'datetime' when b.name in('money','smallmoney') then 'money' else b.name end FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp') and a.id=(select id from tempdb..sysobjects where name=@tbname) --创建sheet语句 set @sql='create table ['+@sheetname+']('+substring(@sql,2,8000)+')' set @i=1 while @i<=@sheetCount begin set @filename=@path+cast(@i as varchar)+@fname truncate table #tb insert into #tb exec master..xp_fileexist @filename if exists(select 1 from #tb where a=1) set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE;CREATE_DB="'+@filename+'";DBQ='+@filename else set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES;DATABASE='+@filename+'"' --创建Excel文件 exec @err=sp_oacreate 'adodb.connection',@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr if @err<>0 goto lberr exec @err=sp_oamethod @obj,'execute',@out out,@sql if @err<>0 goto lberr --关闭Excel exec @err=sp_oamethod @obj,'close',null if @err<>0 goto lberr exec @err=sp_oadestroy @obj set @i=@i+1 end set @fdlist=substring(@fdlist,2,8000) set @i=1 --导入数据 while @i<=@sheetCount begin set @topCount=(@i-1)*@pageCount --可取记录小于页面所需数时取剩余记录 if @totalCount-@topCount<@pageCount set @pageCount=@totalCount-@topCount if @where<>'' begin set @myWhere='z1.recId >'+cast(@topCount as varchar)+' and '+@where set @sql='select top '+convert(varchar,@pageCount)+' '+@fdlist+' from '+substring(@from,1,charindex('where',@from)-2) end else begin set @myWhere='z1.recId >'+cast(@topCount as varchar) set @sql='select top '+convert(varchar,@pageCount)+' '+@fdlist+' from '+@from end set @sql=@sql+' left join #tbMemory z1 on '+@primaryKey+'=primaryKey where '+@myWhere set @constr='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;DATABASE='+@path+cast(@i as varchar)+@fname+''',['+@sheetname+'$])' -- set ansi_nulls on -- set ansi_warnings on --print @sql execute('insert into '+@constr+'('+@fdlist+') '+@sql) set @i=@i+1 end set @sql='drop table ['+@tbname+']' exec(@sql) --set ansi_nulls off --set ansi_warnings off return lberr: exec sp_oageterrorinfo 0,@src out,@desc out lbexit: select cast(@err as varbinary(4)) as 错误号 ,@src as 错误源,@desc as 错误描述 select @sql,@constr,@fdlist GO

example:exec sqlToMultiExcelFile 'select *  from emp.OmEmp','emp_num','d:/wdr','file.xls'

sql 导出,解决sheet表大小限制相关推荐

  1. Oracle 11G在用EXP 导出时,空表不能导出解决

    Oracle 11G在用EXP 导出时,空表不能导出解决 11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了 ...

  2. oracle导出dmp空表导不出来,如何解决Oracle11g使用dmp命令无法导出空表问题

    如何解决Oracle11g使用dmp命令无法导出空表问题 导出:exp  username/password@orcl file=路径 tables=(tb1)    //tables=(tb1)可有 ...

  3. 用exp无法导出空表解决方法/用exp导出数据时表丢失原因

    用exp无法导出空表解决方法/用exp导出数据时表丢失原因 最早的一次使用oracle 11g导出数据发现有的表丢失了,感觉莫名其妙的,后来终于找到原因了. 找到问题以后,再看看解决方案. 11GR2 ...

  4. 解决EXP-00079: 表 PURCHASEORDER 中的数据是被保护的。常规路径只能导出部分表。

    在执行exp导出全库时候,遇到如下错误 EXP-00079: 表 "PURCHASEORDER" 中的数据是被保护的.常规路径只能导出部分表. 原因:这个警告出现是因为这张表启用了 ...

  5. CI框架导出多个mysql查询结果到excel多个sheet表 各大量数据导入(数以万计)

    mysql表结构 导出各班成绩到不同sheet表 public function testPHPExcel(){set_time_limit(0);//防止超时ini_set("memory ...

  6. 查看MS SQL Server数据库每个表占用的空间大小

    参数说明见:http://msdn.microsoft.com/zh-cn/library/ms188776.aspx create table #t(name varchar(255), rows ...

  7. Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出

    Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出 一:MS SQL Report Server 报表的制作. 1.打开Microsoft Visual Studio 20 ...

  8. pandans导出Excel并将数据保存到不同的Sheet表中

    数据存在mongodb中,按照类别导出到Excel文件,问题是想把同一类的数据放到一个sheet表中,最后只导出到一个excel文件中 # coding=utf-8 import pandas as ...

  9. C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)

    详解link  有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错 ...

最新文章

  1. PageHelper 在 Spring Boot + MyBatis 中合理且规范的使用方法
  2. 2018 百越杯 pwn(format WriteUp)
  3. modbus报文解析实例_万字长文!春招面试总结,鹅厂T3Android高频面试真题+解析...
  4. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新
  5. Eclipse引入spring约束详细教程
  6. Docker之docker简介及其优势
  7. 应用于CDN的GSLB系统
  8. 【华为云技术分享】[HDC.Cloud]基于鲲鹏平台的Ceph深度性能调优
  9. Html IECheckBox双击问题
  10. kali2.0 U盘安装的工具
  11. hadoop 3.x 关闭安全模式
  12. 青岛市新添智能服务平台 借力大数据智慧城市再扩容
  13. sublime 安装 sql 格式化插件
  14. 谷歌浏览器如何截全屏长图,超级方便实用
  15. 计算机word excel试题,计算机基础WORD、EXCEL试题
  16. html页面js跨域获取json数据,JS跨域获得Json的应用
  17. 计算机图形学(闫令琪博士课程答疑)-Shading(二)
  18. 毕业论文word格式
  19. ONE readme study
  20. get the sack

热门文章

  1. 2021年十一月八日到2021年十一月十四日笔记
  2. 查询树的所有叶子结点
  3. 学习一下《JavaEE开发的颠覆者 Spring Boot实战 》
  4. 赛迪实验室 | “Apache IoTDB V0.13.0”时序数据库通过中国软件评测中心软件产品技术鉴定测试...
  5. Android屏幕旋转,android实战项目实例
  6. android卡片层叠效果_【点播软件】哈文影视 — Android+iOS端全网追剧应用!
  7. java 全国电视台直播_基于JAVA的电视台直播节目时间表api调用代码实例
  8. 草花机单挑机路单编辑生成器 0.7.9版
  9. PHP 的代码简洁之道(Clean Code PHP)
  10. java+ssm基于微信小程序的电动车智能充电系统 uniapp 小程序 含地图功能