SQL Server 带列名导出到excel的实际操作

数据库 SQL Server
我们今天主要描述的是SQL Server 带列名导出到excel的实际操过程,我们是用sql语句来实现其存储过程,以下就是文章的主要内容描述。

文章主要描述的是SQL Server 带列名导出到excel的实际操过程,以及在其实际操作中的值得我们大家注意的事项与其实际应用代码的描述,以下就是文章的主要内容的详细描述,望大家在浏览之后会对其有更深的了解。

sql语句就用下面的存储过程

 

数据SQL Server 带列名导出Excel

导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件

,如果文件不存在,将自动创建文件

 

,如果表不存在,将自动创建表

 

基于通用性考虑,仅支持SQL Server 带列名导出标准数据类型

 

邹建 2003.10*/

 

调用示例

p_exporttb @sqlstr='select * from 地区资料'

,@path='c:',@fname='aa.xls',@sheetname='地区资料'

 

  1. */  
  2. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)  
  3. drop procedure [dbo].[p_exporttb]  
  4. GO 

create proc p_exporttb

@sqlstr sysname, 查询语句,如果查询语句中使用了order by ,请加上top 100 percent

 

@path nvarchar(1000), 文件存放目录

 

@fname nvarchar(250), 文件名

 

@sheetname varchar(250)='' 要创建的工作表名,默认为文件名

 

  1. as   
  2. declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int  
  3. declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) 

参数检测

  1. if isnull(@fname,'')='' set @fname='temp.xls' 
  2. if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') 

 

SQL Server 带列名导出至excel,检查文件是否已经存在

  1. if right(@path,1)<>'' set @path=@path+''  
  2. create table #tb(a bit,b bit,c bit)  
  3. set @sql=@path+@fname  
  4. insert into #tb exec master..xp_fileexist @sql 

数据库创建语句

  1. set @sql=@path+@fname  
  2. if exists(select 1 from #tb where a=1)  
  3. set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE' 
  4. +';CREATE_DB="'+@sql+'";DBQ='+@sql  
  5. else  
  6. set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 5.0;HDR=YES' 
  7. +';DATABASE='+@sql+'"' 

连接数据库

  1. exec @err=sp_oacreate 'adodb.connection',@obj out  
  2. if @err<>0 goto lberr  
  3. exec @err=sp_oamethod @obj,'open',null,@constr  
  4. if @err<>0 goto lberr  

 

创建表的SQL

  1. declare @tbname sysname  
  2. set @tbname='##tmp_'+convert(varchar(38),newid())  
  3. set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'  
  4. exec(@sql)  
  5.  
  6. select @sql='',@fdlist='' 
  7. select @fdlist=@fdlist+','+a.name  
  8. ,@sql=@sql+',['+a.name+'] '  
  9. +case when b.name in('char','nchar','varchar','nvarchar') then  
  10. 'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'  
  11. when b.name in('tynyint','int','bigint','tinyint') then 'int'  
  12. when b.name in('smalldatetime','datetime') then 'datetime'  
  13. when b.name in('money','smallmoney') then 'money'  
  14. else b.name end  
  15. FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype  
  16. where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')  
  17. and a.id=(select id from tempdb..sysobjects where name=@tbname)  
  18. select @sql='create table ['+@sheetname  
  19. +']('+substring(@sql,2,8000)+')'  
  20. ,@fdlist=substring(@fdlist,2,8000)  
  21. exec @err=sp_oamethod @obj,'execute',@out out,@sql  
  22. if @err<>0 goto lberr  
  23. exec @err=sp_oadestroy @obj  

 

导入数据

  1. set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES 
  2. ;DATABASE='+@path+@fname+''',['+@sheetname+' $])'  
  3. exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')  
  4. set @sql='drop table ['+@tbname+']'  
  5. exec(@sql)  
  6. return  
  7. lberr:  
  8. exec sp_oageterrorinfo 0,@src out,@desc out  
  9. lbexit:  

 

select cast(@err as varbinary(4)) as 错误号

 

,@src as 错误源,@desc as 错误描述

 

select @sql,@constr,@fdlist

以上的相关内容就是对

SQL Server 带列名导出至excel的介绍,望你能有所收获。

【编辑推荐】

  1. MS-SQL server数据库开发中的技巧
  2. SQL Server里调用COM组件的操作流程
  3. 配置Tomcat+SQL Server2000连接池流程
  4. SQL Server Model增加一些变化,很简单!
  5. 易混淆的SQL Server数据类型列举


 

责任编辑:佚名 来源: 网络转载
相关推荐

2010-07-23 09:25:50

SQL Server导

2010-07-07 11:03:21

SQL Server索

2010-07-21 15:22:07

2010-06-28 12:39:14

SQL Server数

2010-07-16 11:10:52

SQL server

2010-06-30 17:56:06

2010-06-28 12:27:35

SQL Server

2010-07-05 12:21:57

SQL Server记

2010-07-06 09:20:30

SQL Server查

2010-07-12 10:13:44

SQL Server表

2010-06-28 13:27:33

SQL Server视

2010-06-17 12:26:51

SQL Server索

2010-06-18 08:30:48

SQL Server

2010-07-21 09:28:34

SQL Server

2010-07-05 10:15:40

SQL Server

2010-07-20 11:13:09

SQL Server日

2010-07-09 12:49:41

SQL Server自

2010-04-16 17:17:31

Oracle访问

2010-07-02 11:10:56

SQL Server

2010-07-23 14:26:37

SQL Server存
点赞
收藏

51CTO技术栈公众号