当前位置: 首页 > news >正文

t-sql导出EXCEL语句--待测试


/*=================== 导入/导出 Excel 的基本方法 ===================*/

从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:

/*========================================================*/

 EXEC master..xp_cmdshell 'bcp " exec weberp.dbo.DailyCash_Excel @PayAccount=null,@StartDate=null,@EndDate=null,@TrackStation=null" queryout "C:\authors.xls" -c -S "(local)" -U "sa" -P "password"'
--如果接受数据导入的表已经存在

insert into 表 select * from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)

--如果导入数据并生成表

select * into 表 from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)

/*========================================================*/

--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:

insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)

select * from 表

--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:

--导出表的情况

EXEC master..XP_cmdshell 'bcp 数据库名.dbo.表名 out "c:test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

--导出查询的情况

EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

/*--说明:

c:test.xls 为导入/导出的Excel文件名.

sheet1$     为Excel文件的工作表名,一般要加上$才能正常使用.

--*/


/*--数据导出EXCEL 

  导出表中的数据到Excel,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表 

  调用示例 
  ExportToExcel  @tbname='test',@path='c:\',@fname='test.xls' 

  --*/ 

  if  exists  (select  *  from  dbo.sysobjects  where  id  =  object_id(N'[dbo].[ExportToExcel]')  and  OBJECTPROPERTY(id,  N'IsProcedure')  =  1) 

  drop  procedure  [dbo].[ExportToExcel] 

  GO 

  

  create  proc  ExportToExcel 

  @Pac  , --要导出的表名,注意只能是表名/视图名 

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

  @fname  nvarchar(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=@tbname+'.xls' 

  --检查文件是否已经存在 

  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=TT;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+'"' 

  

  --连接数据库 

 print @constr

  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 

  select  @sql='',@fdlist='' 

  select  @fdlist=@fdlist+','+a.name 

  ,@sql=@sql+',['+a.name+']  ' 

  +case  when  b.name  in('char','nchar','varchar','nvarchar')  then 

   'text('+cast(case  when  a.length>255  then  255  else  a.length  end  as  varchar)+')' 

  when  b.name  in('tynyint','int','bigint','tinyint')  then  'int' 

  when  b.name  in('smalldatetime','datetime')  then  'datetime' 

  when  b.name  in('money','smallmoney')  then  'money' 

  else  b.name  end 

  FROM  syscolumns  a  left  join  systypes  b  on  a.xtype=b.xusertype 

  where  b.name  not  in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp') 

  and  object_id(@tbname)=id 

  select  @sql='create  table  ['+@tbname 

  +']('+substring(@sql,2,8000)+')' 

  ,@fdlist=substring(@fdlist,2,8000) 

   print @sql

  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+''',['+@tbname+'$])' 

  

  exec('insert  into  '+@sql+'('+@fdlist+')  select  '+@fdlist+'  from  '+@tbname) 

  

  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 


CREATE   PROC   SqlToExcel  
  (  
  @Path                   varchar(100),--文件存放路径  
  @Fname                 varchar(100),--文件名字  
  @SheetName         varchar(80),---工作表名字  
  @SqlStr               varchar(8000)--查询语句,如果查询语句中使用了order       by       ,请加上top       100       percent,注意,如果导出表/视图,用上面的存储过程      
  )  
  AS  
  SET   NOCOUNT   ON  
   
  declare     @sql                 varchar(8000)  
  declare     @obj                 int--OLE对象  
  declare     @constr           varchar(8000)  
  declare     @err                 int  
  declare     @out                 int  
  declare     @fdlist           varchar(8000)  
  declare     @tbname           sysname--临时表  
  declare     @Src                 nvarchar(200)  
  declare     @Desc               nvarchar(200)  
   
  set   @tbname='##tmp_'+convert(varchar(38),newid())  
   
  exec('select   *   into   ['+@tbname   +']   from   '+'('+@sqlStr+')   A')  
   
  select   @fdlist   =   ''  
   
  set   @sql=   @path+@fname  
    set   @constr='DRIVER={Microsoft   Excel   Driver   (*.xls)};DSN='''';READONLY=FALSE'  
                +';CREATE_DB="'+@sql+'";DBQ='+@sql  
   
  --生成Excel的列  
  set   @sql   =   ''  
  select   @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,      
  @fdlist   =   @fdlist+','+'['+a.name+']'    
  from   tempdb..syscolumns   a     join   tempdb..systypes   b   on   a.xtype   =   b.xusertype    
  where   b.name   not   in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')    
              and   id   in(select   id   from   tempdb..sysobjects   where   name   =   @tbname)   order   by   colorder  
  if   @@rowcount=0   return  
   
  set   @fdlist   =   substring(@fdlist,2,8000)  
   
  --连接数据库  
  exec   @err=sp_oacreate   'adodb.connection',@obj   out  
  if   @err   <>   0     goto   lberror  
  exec   @err=sp_oamethod   @obj,'open',null,@constr  
  if   @err   <>   0     goto   lberror  
  --创建工作薄  
  select   @sql='create   table   ['+@sheetname  
    +']('+substring(@sql,2,8000)+')'  
   
  exec   @err=sp_oamethod   @obj,'execute',@out   out,@sql--@sql为excute方法提供参数  
   
  if   @err   <>   0     goto   lberror  
   
  exec   @err=sp_oadestroy   @obj  
   
  --导入数据  
  set   @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel   8.0;HDR=YES  
        ;DATABASE='+@path+@fname+''',['+@sheetname+'$])'  
  --print   @sql  
  exec   ('insert   into   '+@sql+'('+@fdlist+')   select   '+@fdlist+'   from   ['+@tbname+']')  
   
  exec('drop   table   ['+@tbname+']')  
  return  
   
   
  lberror:  
    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  

转载于:https://www.cnblogs.com/y0umer/archive/2011/09/30/3839292.html

相关文章:

  • 冷月枫林
  • PHP 计算程序运行的时间
  • 文本框自动撑高JQ插件
  • 11.23 IBeamMDAAMembershipProvider 是什么?如何使用?
  • C# WinForm开发系列 - File
  • XML中Xpath语法的使用
  • 9、如何控制框架页面或iframe内嵌页面在指定页面(区域)打开页面? [除了div+css,框架页面也不能忘记]...
  • POJ3590 The shuffle Problem——置换群+DP/递推预处理
  • 生成excel控制类
  • jdk和tomcat环境变量配置
  • SQL中的行号ROW_NUMBER()
  • 使用 CTTeleyphonyCenter 截获来去电及短信消息
  • 翻译]游戏主循环
  • Ural_1126. Magnetic Storms 单调队列
  • adb shell dumpsys 命令 查看内存
  • 【5+】跨webview多页面 触发事件(二)
  • 【Amaple教程】5. 插件
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Laravel Mix运行时关于es2015报错解决方案
  • mysql外键的使用
  • mysql中InnoDB引擎中页的概念
  • Vue.js-Day01
  • Web设计流程优化:网页效果图设计新思路
  • 编写符合Python风格的对象
  • 深度学习入门:10门免费线上课程推荐
  • 通过npm或yarn自动生成vue组件
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 小程序 setData 学问多
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (12)Linux 常见的三种进程状态
  • (2020)Java后端开发----(面试题和笔试题)
  • (C++20) consteval立即函数
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (算法)Game
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)四层和七层负载均衡的区别
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net mvc部分视图
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • .sys文件乱码_python vscode输出乱码
  • @synthesize和@dynamic分别有什么作用?
  • [ABC294Ex] K-Coloring
  • [APUE]进程关系(下)
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BROADCASTING]tensor的扩散机制