初学的朋友经常遇到的问题!可以看看这里

转载 2006年06月27日 10:57:00


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


相关文章推荐

经常写VC工程的人都会遇到升级到VS2005时出现的各种各样的问题,下面写一些自己遇到的问题,还有什么不全的请大家补充。希望能给朋友们一些帮助。

今天在将2003建立的工程转换成2005时,发现遇到很多问题,网上搜了一些解决办法:   经常写VC工程的人都会遇到升级到VS2005时出现的各种各样的问题,下面写一些自己遇到的问题,还有...

友盟分享(QQ,空间,微信,朋友圈,微博)遇到的问题

友盟分享(QQ,空间,微信,朋友圈,微博)遇到的问题

最近在做ShareSDK的微信分享的时候遇到了点问题,就是分享的时候选择微信好友或者微信朋友圈会打开一下微信然后界面都还没加载出来就闪退。这个问题我在网上找了好多种的可能的情况以及处理办法,最终找到了

最近在做ShareSDK的微信分享的时候遇到了点问题,就是分享的时候选择微信好友或者微信朋友圈会打开一下微信然后界面都还没加载出来就闪退。这个问题我在网上找了好多种的可能的情况以及处理办法,最终找到了...
  • wpxqlz
  • wpxqlz
  • 2017年01月19日 15:28
  • 625

面试经常遇到问题

  • 2013年02月24日 14:08
  • 7KB
  • 下载

新手经常遇到domino问题的总结

  • 2010年04月23日 09:26
  • 1.86MB
  • 下载

经常被挂马的朋友必看之安全思维

一、挂马前的安全措失  A、改更默认管理目录dede。  B、检查install目录里是否存在install.lock文件。有用户没给install目录写权限导致安装的时候没有生成lock...

分享 常用 经常遇到的问题

  • 2012年03月16日 16:28
  • 6KB
  • 下载

给经常修理电脑的朋友16点忠告

1、首先记住这句话:永远不要承认自己是高手,因为这个称号是要付出代价的。2、接到陌生电话后,一定要问清楚对方有什么事情,然后再告诉他(她)当前你目前所在的位置。3、永远不要试图通过电话或者QQ解决某个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初学的朋友经常遇到的问题!可以看看这里
举报原因:
原因补充:

(最多只允许输入30个字)