CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

BCP导出数据到EXCEL文件时,如何连字段名一起导出?

楼主qinjs(皮皮C天下)2006-03-13 17:59:10 在 MS-SQL Server / 基础类 提问

例如  
  EXEC   master..xp_cmdshell   'bcp   Mobile.dbo.bumen   out   c:\data\temp1.xls   -c   -q   -U"sa"   -P"password"'  
  导出后,发现temp1.xls只有数据,没有字段名  
   
  怎么能够连字段名一起导出? 问题点数:20、回复次数:3Top

1 楼zjcxc(邹建)回复于 2006-03-13 18:02:26 得分 0

bcp方式导出的是没有字段名,   而且xls也不是真正的excel文档,   而是文本文档Top

2 楼zjcxc(邹建)回复于 2006-03-13 18:02:47 得分 20

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_exporttb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_exporttb]  
  GO  
   
  /*--数据导出EXCEL  
   
  导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件  
  如果文件不存在,将自动创建文件  
  如果表不存在,将自动创建表  
  基于通用性考虑,仅支持导出标准数据类型  
   
  --邹建   2003.10(引用请保留此信息)--*/  
   
  /*--调用示例  
   
  p_exporttb   @sqlstr='select   *   from   地区资料'  
  ,@path='c:\',@fname='aa.xls',@sheetname='地区资料'  
  --*/  
  create   proc   p_exporttb  
  @sqlstr   varchar(8000), --查询语句,如果查询语句中使用了order   by   ,请加上top   100   percent  
  @path   nvarchar(1000), --文件存放目录  
  @fname   nvarchar(250), --文件名  
  @sheetname   varchar(250)='' --要创建的工作表名,默认为文件名  
  as    
  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='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)  
  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   (*.xls)};DSN='''';READONLY=FALSE'  
          +';CREATE_DB="'+@sql+'";DBQ='+@sql  
  else  
  set   @constr='Provider=Microsoft.Jet.OLEDB.4.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.JET.OLEDB.4.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  
  go  
  Top

3 楼lehua713(lehua713)回复于 2006-03-24 01:26:41 得分 0

这个存储过程不错!!  
  但是好象只能导出结构,导不出数据。Top

相关问题

  • 请问用BCP把数数据库表导出成EXCEL能设置其输出字段名吗
  • php导出Excel如何不显示字段名
  • 如何将字段名导出到excel里? 在线急候~~~~~~~~~~~~~~
  • 导出adoquery到EXCEL时可以把字段名一同导出吗?谢谢大虾!
  • 关于导出数据到excel的一个问题,希望可以连字段名字一起导出来
  • bcp倒出字段名的问题?
  • 怎样取得excel中的字段名
  • 把MSHFlexGrid中的内容导如到EXCEL,怎么在EXCEL中加入字段名
  • 全额可用分求解,如何解决长字段名导出时出现的问题
  • 保存为excel之后,为什么显示不了字段名称?

关键词

  • 文件
  • 数据
  • 语句
  • excel
  • 导出
  • 字段名
  • fdlist
  • exporttb
  • bcp
  • sheetname

得分解答快速导航

  • 帖主:qinjs
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo