`
宋科明
  • 浏览: 101590 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL导入/导出Excel

阅读更多

 这是在CSDN上邹键的东西,推荐给大家。

从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]
GO

create  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
else
 set  @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  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)

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  5.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

 

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

create  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
else
 set  @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  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  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  lberr

exec  @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)
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

分享到:
评论

相关推荐

    sql导入导出excel、access工具

    以下是对"sql导入导出excel、access工具"这一主题的详细说明。 1. SQL导入Excel: 当我们有大量数据存储在Excel工作表中,而需要将这些数据迁移到SQL数据库时,可以使用SQL Server Integration Services (SSIS) 或...

    精典简单vs.NET 下SQL数据库导出/导入Excel

    - 文档中提到了一个 SQL 插入语句,用于将 Excel 文件中的数据导入到 SQL Server 数据库中: ```sql INSERT INTO myTable(col1, col2, col3) SELECT * FROM OpenDataSource('MICROSOFT.JET.OLEDB.4.0', 'Data ...

    EXCEL与SQL SERVER 的导入与导出

    总的来说,Excel与SQL Server之间的数据导入导出是数据集成的重要环节,C#提供了一套完整的工具和接口来实现这一过程。开发者需要了解SQL查询、ADO.NET、Excel API以及数据库事务等相关知识,才能有效地进行数据的...

    SQL与Excel导入导出

    以下是关于"SQL与Excel相互导入导出"的相关知识点: 1. **SQL基础**: - SQL是一种标准的语言,用于创建、查询、更新和管理关系型数据库,如MySQL、SQL Server、Oracle等。 - SQL的主要操作包括SELECT(查询数据...

    百万级数据在Excel和Sql数据库之间相互导入、导出

    在IT行业中,处理大量...总的来说,正确地在Excel和SQL Server之间导入导出百万级数据需要理解两者的特点,选择合适的方法,并注意数据处理的最佳实践。在实际操作中,应根据具体需求和资源限制来选择最适合的方案。

    php 实现从mysql导出excel中

    这篇教程将详细介绍如何使用PHP实现从MySQL数据库导出数据到Excel文件。 首先,我们需要理解基本的流程。这个过程通常包括以下几个步骤: 1. **连接MySQL数据库**:使用PHP的`mysqli_connect`或`PDO`函数建立与...

    SQL 导入导出Excel数据的语句

    SQL 导入导出 Excel 数据的语句 本文将详细介绍如何使用 SQL 语句将数据从 Excel 文件中导入到数据库中,以及如何将数据从数据库中导出到 Excel 文件中。 导入数据 要从 Excel 文件中导入数据到 SQL 数据库中,...

    sql导入导出成excel源代码

    根据提供的文件信息,本文将详细解释如何通过 SQL 实现数据导入导出至 Excel 文件的功能,同时探讨代码的具体实现以及可能存在的限制与优化方法。 ### 一、SQL 导入导出至 Excel 的背景 在日常的数据处理工作中,...

    vb sql 导入导出 excel 源码打包

    标题 "vb sql 导入导出 excel 源码打包" 涉及的核心知识点是使用Visual Basic 6.0 (VB6) 和 SQL 数据库进行Excel数据的导入与导出。这一技术对于数据处理、分析和报表生成至关重要。下面将详细介绍这些知识点。 1. ...

    SQL使用存储过程导入和导出Excel

    ### SQL使用存储过程导入和导出Excel #### 知识点一:从Excel文件导入数据到SQL数据库 在SQL环境中,可以通过使用特定的命令来实现从Excel文件导入数据到SQL数据库的功能。具体步骤如下: 1. **直接导入到现有表*...

    servlet导入导出excel

    在Java Web开发中,Servlet是一种常用的服务器端编程接口,用于扩展服务器的功能。...通过这种方式,你可以构建一个功能完善的Web应用,允许用户方便地导入和导出Excel数据,从而提升数据处理的效率和便捷性。

    SQL定时导出数据到Excel

    `BCP`(Bulk Copy Program)是SQL Server提供的一种批量复制工具,主要用于快速地导入导出数据。通过`BCP`命令,可以非常方便地将表中的数据导出到文本文件,再将该文本文件转换为Excel格式。 **示例代码**: ```...

    SQLServer 导入导出小工具(c#)

    SQLServer导入导出小工具(c#)是一个实用的应用程序,它允许用户方便地将数据从不同的源导入到SQL Server数据库,或者从SQL Server导出到其他格式。这个工具是用C#编程语言编写的,这表明开发者利用了C#的强大特性...

    SpringBoot +Mybatis +POI导入、导出Excel文件

    总的来说,"SpringBoot + Mybatis + POI导入、导出Excel文件"的项目是一个实用的工具,可以帮助开发者快速实现数据交换功能,提高工作效率。通过理解SpringBoot的自动配置、Mybatis的SQL映射以及POI的Excel操作,...

    导入/导出SQL Server数据的VB通用类.pdf

    在VB.NET编程环境中,开发人员经常需要处理与数据库交互的任务,包括从SQL Server...通过理解和应用这些知识点,VB.NET开发者可以更高效地完成SQL Server数据库的导入导出任务,从而提高项目开发的效率和可维护性。

    sql导入导出数据到Excel

    sql导入导出数据到Excel的详细步骤

    sqlserver 数据库导出excel

    BCP 是 SQL Server 提供的一个命令行工具,用于批量导入或导出数据。它不仅可以将数据导出到文本文件,还可以直接导出到 Excel 文件。 **具体步骤:** - 使用 `xp_cmdshell` 扩展存储过程调用 BCP 命令。首先,...

    Sql数据与Excel数据的导入和导出

    在IT领域,特别是软件开发与数据管理中,数据...以上就是在C#中实现SQL数据与Excel数据的导入导出的关键步骤和技巧。这不仅涉及到对C#编程语言的掌握,还要求对数据库操作、文件处理以及图形用户界面组件有深入的理解。

Global site tag (gtag.js) - Google Analytics