一个将数据导出到EXCEL的存储过程

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

/*--数据导出 EXCEL
 
 导出查询中的数据到,包含字段名,文件为真正的 EXCEL文件
 ,如果文件不存在,将自动创建文件
 ,如果表不存在,将自动创建表
 基于通用性考虑,仅支持导出标准数据类型
作者:邹建
--*/

/*--调用示例

 p_exporttb@sqlstr='select*from地区资料'
 ,@path='c:/',@fname='aa.xls',@sheetname='地区资料'
--*/



createprocp_exporttb
@tbnamesysname,   --要导出的表名
@pathnvarchar(1000),  --文件存放目录
@fnamenvarchar(250)='' --文件名,默认为表名
as
declare@errint,@srcnvarchar(255),@descnvarchar(255),@outint
declare@objint,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)

--参数检测
ifisnull(@fname,'')=''set@fname=@tbname+'.xls'

--检查文件是否已经存在
ifright(@path,1)<>''set@path=@path+''
createtable#tb(abit,bbit,cbit)
set@sql=@path+@fname
insertinto#tbexecmaster..xp_fileexist@sql

--创建语句
set@sql=@path+@fname
ifexists(select1from#tbwherea=1)
 set@constr='DRIVER={Microsoft EXCELDriver(*.xls)};DSN='''';READONLY=FALSE'
      +';CREATE_DB="'+@sql+'";DBQ='+@sql
else
 set@constr='Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties=" EXCEL8.0;HDR=YES'
   +';DATABASE='+@sql+'"'


--连接数据库
exec@err=sp_oacreate'adodb.connection',@objout
if@err<>0gotolberr

exec@err=sp_oamethod@obj,'open',null,@constr
if@err<>0gotolberr

/*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select@sql='droptable['+@tbname+']'
exec@err=sp_oamethod@obj,'execute',@outout,@sql
--*/

--创建表的SQL
select@sql='',@fdlist=''
select@fdlist=@fdlist+',['+a.name+']'
 ,@sql=@sql+',['+a.name+']'
 +casewhenb.namein('char','nchar','varchar','nvarchar')then
    'text('+cast(casewhena.length>255then255elsea.lengthendasvarchar)+')'
  whenb.namein('tynyint','int','bigint','tinyint')then'int'
  whenb.namein('smalldatetime','datetime')then'datetime'
  whenb.namein('money','smallmoney')then'money'
  elseb.nameend
FROMsyscolumnsaleftjoinsystypesbona.xtype=b.xusertype
whereb.namenotin('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
 andobject_id(@tbname)=id
select@sql='createtable['+@tbname
 +']('+substring(@sql,2,8000)+')'
 ,@fdlist=substring(@fdlist,2,8000)
exec@err=sp_oamethod@obj,'execute',@outout,@sql
if@err<>0gotolberr

exec@err=sp_oadestroy@obj

--导入数据
set@sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'','' EXCEL8.0;HDR=YES
  ;DATABASE='+@path+@fname+''',['+@tbname+'$])'

exec('insertinto'+@sql+'('+@fdlist+')select'+@fdlist+'from'+@tbname)

return

lberr:
 execsp_oageterrorinfo0,@srcout,@descout
lbexit:
 selectcast(@errasvarbinary(4))as错误号
 ,@srcas错误源,@descas错误描述
 select@sql,@constr,@fdlist

GO


========================================
NinGoo注:
  EXCEL文件每个工作表不能超过65536条记录


解决办法: 1
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值