`
ljl_xyf
  • 浏览: 633936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从SQL Server中导入/导出Excel的基本方法

阅读更多
从excel文档中,导入数据到sql数据库中,很简单,直接用下面的语句:

从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'密码'

--上面已说过,用bcp导出的是类excel文档,其实质为文本文档,

--要导出真正的excel文档.就用下面的方法

if exists (select * from dbo.sysobjects where id = object_id(n[dbo].[p_exporttb]) and objectproperty(id, nisprocedure) = 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=' +;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
--上面是导表的,下面是导查询语句的.

if exists (select * from dbo.sysobjects where id = object_id(n[dbo].[p_exporttb]) and objectproperty(id, nisprocedure) = 1)
drop procedure [dbo].[p_exporttb]
go

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

分享到:
评论

相关推荐

    EXCEL与SQL SERVER 的导入与导出

    另一方面,从SQL Server导入到Excel则常用于数据分析和报告编制。通过编写SQL查询获取所需数据,然后利用C#的Microsoft.Office.Interop.Excel库,可以直接将查询结果写入Excel工作表。在这个过程中,你需要创建Excel...

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

    在Excel与SQL Server之间进行数据导入导出有多种方法: 1. **Excel数据连接**:利用Excel的“获取和转换”或旧版的“数据导入”功能,可以直接连接到SQL Server数据库,实时查看和编辑数据。这种方法适合小批量的...

    从SQLServer备份数据,导入导出Excel的基本方法

    此外,对于大型数据集,直接使用SQL Server的`bcp`命令或SSIS (SQL Server Integration Services) 提供更高效且可自定义的导入导出方式。`bcp`允许批量导入和导出数据,而SSIS则提供更复杂的转换和流程控制,适合...

    SQL Server 2016 多种导入EXCEL 2013表数据的方法

    - 如果在SSMS中遇到问题(例如,32位与64位Office的兼容性问题),可以直接从开始菜单启动相应的64位导入导出向导,如`C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe`。 - 解决“未在本地...

    sql server 2005 导入和导出选择数据源

    在实际应用场景中,常常需要将Excel或Access等办公软件中的数据导入到SQL Server中,或者从SQL Server导出数据到这些办公软件中。SQL Server 2005支持多种办公软件数据源,包括: - **Microsoft Office Excel**:...

    delphi实现excel和SQLserver数据的导入导出

    总结,Delphi实现Excel和SQL Server数据的导入导出涉及的主要步骤包括:建立数据库连接、选择合适的数据处理库或组件、编写数据读取和写入的代码、转换数据格式以及执行导入导出操作。这个过程需要对Delphi编程、...

    把Sql Server里的数据导出到Excel里面!

    - 在Power Query编辑器中,添加数据源,选择“从数据库”-&gt;“从Sql Server”,输入连接信息并选择表,最后“加载”到Excel工作簿。 每种方法都有其适用场景和优缺点。例如,SSMS导出数据工具直观易用,但可能不...

    SQL与Excel导入导出

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

    SQL_Server数据与Excel表的导入导出

    ### SQL Server 数据与 Excel 表的导入导出详解 #### 一、概述 在数据库管理领域,数据导入导出是一项非常重要的技能。无论是为了合并数据、归档还是数据分析,甚至是开发应用程序或升级数据库,数据迁移都是必不...

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

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

    Web页面中sqlserver快速导入excel

    Web页面中sqlserver快速导入excel,生成csv格式 有的程序在Web页SQLSERVER导入excel的过程中,会出现下载时找不到样式的错误提示。本资源避免了以上问题,快速打开,快速导出。 c#.Net2005下运行成功。

    C#对SQLServer中的数据导入导出.pdf

    ### C#对SQL Server中的数据导入导出:深入解析与实践 #### 一、引言 在数据库管理系统(DBMS)的应用中,特别是在企业级应用领域,数据的导入与导出是一项常见且至关重要的任务。这不仅涉及到数据的迁移、备份,...

    sqlserver 2005 数据库导入导出图解

    标题 "sqlserver 2005 数据库导入导出图解" 涉及到的是SQL Server 2005数据库管理系统中数据的导入和导出操作,这是数据库管理中的重要环节,通常用于数据迁移、备份或数据分析。下面将详细阐述这一主题。 一、SQL ...

    c# sql server2008R2与Excel的导入导出

    标题 "C# SQL Server2008R2与Excel的导入导出" 涉及的是在.NET开发环境中,利用C#语言与SQL Server 2008 R2数据库进行数据交互,特别是数据的导入和导出功能。SQL Server 2008 R2是微软公司的一款强大的关系型数据库...

    SQL SERVER数据导入导出等辅助功能小工具

    在SQL Server数据库管理系统中,数据导入导出是日常管理和维护工作的重要组成部分,它涉及到数据迁移、备份恢复、数据同步等多个方面。本工具集专注于提供这些辅助功能,旨在提高数据库管理员的工作效率。以下将详细...

    SQL Server SQL语句导入导出大全

    SQL Server SQL 语句导入导出大全 简介:微软 SQL Server 数据库 SQL 语句导入导出大全,包括与其他数据库和文件的数据的导入导出。下面是 SQL Server SQL 语句导入导出大全的详细知识点。 导出到 Excel 为了将...

    Access、SQLServer、Excel三者之间实现导入与导出

    4. Excel到SQL Server导入:使用SSIS包设计数据流任务,或者通过Excel ODBC连接直接在SQL Server Management Studio中导入。 5. SQL Server到Excel导出:利用SSIS包或T-SQL的SELECT INTO OUTFILE命令生成CSV文件,...

    SQL SERVER2005 数据库导入导出

    首先,SQL Server 2005的数据导入导出功能主要通过“数据库导入和导出向导”来实现,这是一个内置工具,可以帮助用户将数据从多种数据源迁移到SQL Server,或者将SQL Server中的数据导出到其他格式。这个过程通常...

    SQL_SERVER数据导入导出工具

    SQL_SERVER数据导入导出工具是数据库管理中必不可少的辅助软件,尤其对于SQL Server数据库的开发者和管理员来说,它极大地提高了工作效率。此工具主要用于方便、快捷地将数据从SQL Server数据库导出,同时也能进行...

Global site tag (gtag.js) - Google Analytics