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

/*===================================================================*/
--如果接受数据导入的表已经存在
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导出表中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型
---*//*--调用示例p_exporttb  @tbname=’地区资料’,@path=’c:\’,@fname=’aa.xls’
--*/
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]
GOcreate  proc  p_exporttb
@tbname  sysname,        --要导出的表名,注意只能是表名/视图名
@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=’’’’;READONLY=FALSE’+’;CREATE_DB="’+@sql+’";DBQ=’+@sql
elseset  @constr=’Provider=Microsoft.Jet.OLEDB.4.0;Extended  Properties="Excel  5.0;HDR=YES’+’;DATABASE=’+@sql+’"’--连接数据库
exec  @err=sp_oacreate  ’adodb.connection’,@obj  out
if  @err<>0  goto  lberrexec  @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)exec  @err=sp_oamethod  @obj,’execute’,@out  out,@sql
if  @err<>0  goto  lberrexec  @err=sp_oadestroy  @obj--导入数据
set  @sql=’openrowset(’’MICROSOFT.JET.OLEDB.4.0’’,’’Excel  5.0;HDR=YES;DATABASE=’+@path+@fname+’’’,[’+@tbname+’$])’exec(’insert  into  ’+@sql+’(’+@fdlist+’)  select  ’+@fdlist+’  from  ’+@tbname)returnlberr: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*--数据导出EXCEL
  导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型
--*//*--调用示例p_exporttb  @sqlstr=’select  *  from  地区资料’,@path=’c:\’,@fname=’aa.xls’,@sheetname=’地区资料’
--*/
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]
GOcreate  proc  p_exporttb
@sqlstr  sysname,        --查询语句,如果查询语句中使用了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
elseset  @constr=’Provider=Microsoft.Jet.OLEDB.4.0;Extended  Properties="Excel  5.0;HDR=YES’+’;DATABASE=’+@sql+’"’--连接数据库
exec  @err=sp_oacreate  ’adodb.connection’,@obj  out
if  @err<>0  goto  lberrexec  @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  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  tempdb..syscolumns  a  left  join  tempdb..systypes  b  on  a.xtype=b.xusertype
where  b.name  not  in(’image’,’text’,’uniqueidentifier’,’sql_variant’,’ntext’,’varbinary’,’binary’,’timestamp’)and  a.id=(select  id  from  tempdb..sysobjects  where  name=@tbname)
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  lberrexec  @err=sp_oadestroy  @obj--导入数据
set  @sql=’openrowset(’’MICROSOFT.JET.OLEDB.4.0’’,’’Excel  5.0;HDR=YES;DATABASE=’+@path+@fname+’’’,[’+@sheetname+’$])’exec(’insert  into  ’+@sql+’(’+@fdlist+’)  select  ’+@fdlist+’  from  [’+@tbname+’]’)set  @sql=’drop  table  [’+@tbname+’]’
exec(@sql)
returnlberr: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/bingoyan/archive/2012/10/23/2736209.html

SQL导入/导出Excel相关推荐

  1. MSSQL数据导入导出Excel的相关代码

    MSSQL数据导入导出Excel的相关代码 参考: https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926 1 Export data to e ...

  2. java io导出excel表格_Java IO 导入导出Excel表格

    1.将excel导入到内存 1. 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象 InputStream in = new FileInputStrea ...

  3. toad导入数据_Oracle 使用TOAD实现导入导出Excel数据

    在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的.Quest Software为此提供了高效的Orac ...

  4. csv和excel php 解析_PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

    CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件. 一.CSV数据导入函数fgetcsv() fgetcsv() 函数从文件指针中读入一行并解析 CSV ...

  5. 带你实现java根据表结构动态导入导出Excel

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 前言 最近在甲方爸爸的要(威)求(逼)下,项目经理带来了客户的全新需求,希望能够在原有编辑 ...

  6. java jdbc excel_详解poi+springmvc+springjdbc导入导出excel实例

    工作中常遇到导入导出excel的需求,本獂有一简答实例与大家分享. 废话不多说, 1.所需jar包: 2.前端代码: ieport.jsp: 导入\导出页面 function exportFile() ...

  7. EOS中如何实现导入导出excel文件

    阅读原文 导入导出excel文件 场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出 ...

  8. php导出excel2007实例,php导入导出excel实例

    这里实现的PHP导入导出excel功能用到的是开源PHPExcel,执行下面的操作之前请先下载该类库文件,官方网站:http://www.codeplex.com/PHPExcel,官网案例代码很多, ...

  9. PHP 导入导出excel、csv百万数据到数据库

    PHP 导入导出excel.csv百万数据到数据库 待解决: wamp下导入导出百万数据没有问题 lnmp下导入10W条数据没问题,导入50W及以上会出现nginx504报错 代码包地址 测试数据表地 ...

  10. C#IO之导入导出Excel的多种方式

    C#IO之导入导出Excel的多种方式 一.基本介绍: 今天给大家带来的是Excel导入导出的多种实现方式,以及他们的各自的优势以及劣势,首先第一种方式是使用Office组件的方式 ,第二种方式是使用 ...

最新文章

  1. 使用NodeList
  2. jdom 插入 修改 删除
  3. 05-xpath爬虫数据解析
  4. sql case when then else多个条件_SQL-多表查询
  5. python通过内置函数测试对象类型_python测试开发(01-递归函数+内置函数)
  6. vue弹出框消息重置问题---一个投机取巧的方法
  7. 【Webcam设计】x264对OpenCV Mat的编解码
  8. c语言中ox1小于小于a,丹江口市2018适应性数学试卷和答案
  9. mongo性能测试demo 代码正确运行
  10. 原因及解决办法:error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file
  11. vex编程语言是基于c语言,vex机器人编程软件 vex机器人大赛
  12. PSS E v33.40 1CD(大型电力系统仿真计算软件)
  13. SPSS中的数据分析—描述性统计分析【2】
  14. xul转换html,ExportHTMLFolderMod.uc.xul
  15. 本地java源代码上传码云
  16. 桌面图标快捷方式小箭头_如何在Windows 7、8和10中删除(或更改)快捷方式图标上的箭头...
  17. 【2021-09-22 修订】【梳理】计算机网络:自顶向下方法 第二章 应用层(docx)
  18. 【stm32f407】硬件介绍
  19. Directx11 安装、配置、报错
  20. 双排桩弯矩Matlab求解程序,考虑开挖过程椅式双排桩内力及变形分析

热门文章

  1. qmake构建项目详细讲解
  2. Golang 网络爬虫框架gocolly/colly
  3. Weex中页面导航的实现
  4. 10月24日云栖精选夜读:2017杭州·云栖大会完美收官 虚拟化平台精彩回顾
  5. 利用nexus搭建maven库并利用AS上传aar
  6. 用Java开源项目JOONE实现人工智能编程
  7. Netty框架中的@Skip使用说明
  8. sybase修改默认字符集为cp936
  9. excel 文件导入数据库(java)
  10. SQL DATEADD函数