CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

再求SQL表导成EXCEL表。谢谢!

楼主zxg007()2006-06-01 21:46:54 在 MS-SQL Server / 疑难问题 提问

这个问题我等了好几天了。希望高手能帮忙。谢谢!  
  再求SQL表导成EXCEL表。谢谢!  
  SQL   Server查询分析器里用Sql语句把SQL里的表导成EXCEL表应该怎么做?谢谢! 问题点数:10、回复次数:10Top

1 楼chjpeng(鹏(招聘.net web开发程序员))回复于 2006-06-01 22:03:50 得分 0

/*--数据导出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

2 楼zxg007()回复于 2006-06-01 22:34:47 得分 0

这些资料我都有,而且很多。  
  但就是自己试了怎么也不成功。  
  你能不能给个简单的:导成一张EXCEL表的例子呢?  
  我试了好几天了就是不行。Top

3 楼liangpei2008(笑青天)回复于 2006-06-02 08:19:54 得分 0

Use   Master  
  Exec   Xp_cmdshell   'bcp   数据库名.dbo.表名   out   c:\a.txt   -T   -c'  
  --C:\a.txt是导出来后的文件名,也可更改Top

4 楼jasonren(jason)回复于 2006-06-02 10:26:38 得分 0

liangpei2008(我爱世界杯)    
  nodTop

5 楼zxg007()回复于 2006-06-02 12:53:38 得分 0

这是在VC中将查询的结果导成EXCEL表,可是没结果。不知道怎么回事?  
  CDatabase   db;  
  CString   SQLStr;  
  CString   Path,DBName;  
  Path.Format("c:\\dd.xls");  
  DBName.Format("select   c_name   from   zxg007db.dbo.stuinfo");//问题可能是这个要带个引号。但VC里面不知如何给语句加引号  
  SQLStr.Format("Exec   master..Xp_cmdshell   'bcp   %s   queryout   %s   -T   -c'",DBName,Path);  
  db.Open("student");  
  db.ExecuteSQL(SQLStr);  
  db.Close();Top

6 楼tanweibiao2000(延平)回复于 2006-06-02 13:58:12 得分 0

在企业管理器里直接导出数据,数据源选择EXCEL2000。  
  步骤:1、新建一个空的EXCEL;2、从何处复制数据源,选择要导出的数据库;3、选择目的,选择Microsoft   Excel   97-2000,文件名选择刚才新建的那个EXCEL表格。4、按下一步,然后选择“用一条查询指定要传输的数据”,然后,按下一步,输入你在查询分析器里的SQL语句,下一步。。。。Top

7 楼czmtxz(陈志明)回复于 2006-06-02 14:40:06 得分 0

在C盘建立内码名称对应表.xls,SHEET1第一列,第二列标题为fuserid和fname  
  insert   into   OpenRowSet('microsoft.jet.oledb.4.0','Excel   8.0;hdr=yes;database=c:\内码名称对应表.xls;','select   *   from   [sheet1$]')(fuserid,fname)  
  select   fuserid,fname   from   t_user  
   
  --从t_user中把fuserid,fname数据导入到c:\内码名称对应表.xls的SHEET1中.Top

8 楼zxg007()回复于 2006-06-02 17:15:10 得分 0

内码?不明白是什么意思。  
  还有,tanweibiao2000(延平)兄弟的方法类似录制宏是吗?可是这么做的结果只得到查询语句没有导出的代码。  
   
  下面只是简单的查询语句,并没有导出的功能代码:  
  select   [StuInfo].[P_C_ID],   [StuInfo].[C_NAME],   [StuInfo].[C_SEX],   [StuInfo].[C_DIPLOMA],   [StuInfo].[C_TEL],   [StuInfo].[C_MOBNUM],   [StuInfo].[C_HOMEADR],   [StuInfo].[C_OFFIADR],   [StuInfo].[C_LESSGROUP]  
  from   [StuInfo]  
   
  order   by   [StuInfo].[P_C_ID],   [StuInfo].[C_NAME],   [StuInfo].[C_SEX],   [StuInfo].[C_DIPLOMA],   [StuInfo].[C_TEL],   [StuInfo].[C_MOBNUM],   [StuInfo].[C_HOMEADR],   [StuInfo].[C_OFFIADR],   [StuInfo].[C_LESSGROUP]Top

9 楼fire_qu(金迷之蓝色忧郁)回复于 2006-06-02 17:39:03 得分 0

去这里看看邹老大的吧!  
  http://blog.csdn.net/zjcxc/archive/2003/12/29/20084.aspx  
  应该就全明白了!Top

10 楼zxg007()回复于 2006-06-02 20:55:59 得分 0

很早的时候我也有学着邹先生的做法,但是后面想做个简单点的。用他的方法我更乱了,太复杂了。Top

相关问题

关键词

得分解答快速导航

  • 帖主:zxg007

相关链接

  • SQL Server类图书

广告也精彩

反馈

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