LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

导出EXCEL的存储过程

Ccoffee
2018年11月16日 9:2 本文热度 3338

IF OBJECT_ID(''dbo.Proc_DBA_ExportExcel'') IS NOT NULL
 DROP PROC dbo.Proc_DBA_ExportExcel 
GO
CREATE  PROC dbo.Proc_DBA_ExportExcel 
 @sqlstr varchar(8000),--查询语句,如果查询语句中使用了order by ,请加上top 100 percent 
 @path nvarchar(1000),--文件存放目录 
 @fname nvarchar(250),--文件名 
 @sheetname varchar(250)=''''--要创建的工作表名,默认为文件名 
AS
BEGIN
 declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int 
 declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) 
  
 --参数检测 
 if isnull(@fname,'''')=''''set @fname=''temp2012.xls'' 
 if isnull(@sheetname,'''')='''' set @sheetname=replace(@fname,''.'',''#'') 
  
 --检查文件是否已经存在 
 if right(@path,1)<>''\'' set @path=@path+''\'' 
 create table #tb(a bit,b bit,c bit) 
 set @sql=@path+@fname 
 insert into #tb exec master..xp_fileexist @sql 
  
 --数据库创建语句 
 set @sql=@path+@fname 
 if exists(select 1 from #tb where a=1) 
 set @constr=''DRIVER={Microsoft Excel Driver (*.xlsx)};DSN='''''''';READONLY=FALSE'' 
 +'';CREATE_DB="''+@sql+''";DBQ=''+@sql 
 else 
 set @constr=''Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties="Excel 8.0;HDR=YES'' 
 +'';DATABASE=''+@sql+''"'' 
  
 --连接数据库 
 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 
  
 --创建表的SQL 
 declare @tbname sysname 
 set @tbname=''##tmp_''+convert(varchar(38),newid()) 
 set @sql=''select * into [''+@tbname+''] from(''+@sqlstr+'') a'' 
 exec(@sql) 
  
 select @sql='''',@fdlist='''' 
 select @fdlist=@fdlist+'',[''+a.name+'']'' 
 ,@sql=@sql+'',[''+a.name+''] '' 
 +case 
 when b.name like ''%char'' 
 then case when a.length>255 then ''memo'' 
 else ''text(''+cast(a.length as varchar)+'')'' end 
 when b.name like ''%int'' or b.name=''bit'' then ''int'' 
 when b.name like ''%datetime'' then ''datetime'' 
 when b.name like ''%money'' then ''money'' 
 when b.name like ''%text'' then ''memo'' 
 else b.name end 
 FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype 
 where b.name not in(''image'',''uniqueidentifier'',''sql_variant'',''varbinary'',''binary'',''timestamp'') 
 and a.id=(select id from tempdb..sysobjects where name=@tbname) 
  
 if @@rowcount=0 return 
  
 select @sql=''create table [''+@sheetname 
 +''](''+substring(@sql,2,8000)+'')'' 
 ,@fdlist=substring(@fdlist,2,8000) 
  
 exec @err=sp_oamethod @obj,''execute'',@out out,@sql 
 if @err<>0 goto lberr 
  
 exec @err=sp_oadestroy @obj 
  
 --导入数据 
 set @sql=''openrowset(''''Microsoft.ACE.OLEDB.12.0'''',''''Excel 8.0;HDR=YES 
 ;DATABASE=''+@path+@fname+'''''',[''+@sheetname+''$])'' 
  
 exec(''insert into ''+@sql+''(''+@fdlist+'') select ''+@fdlist+'' from [''+@tbname+'']'') 
  
 set @sql=''drop table [''+@tbname+'']'' 
 exec(@sql) 
 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 
END
GO

使用:
sp_configure ''Ole Automation Procedures'', ''1''
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC dbo.Proc_DBA_ExportExcel
 @sqlstr=''SELECT * FROM [master].dbo.spt_values AS sv''
 ,@path=''d:\''
 ,@fname=''test.xlsx''
 ,@sheetname=''测试''
GO
sp_configure ''Ole Automation Procedures'', ''0''
GO
RECONFIGURE WITH OVERRIDE
GO


该文章在 2018/11/16 10:40:37 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved