从SQLServer中导入导出Excel的基本方法

从SQLServer中导入导出Excel的基本方法,第1张

从sql server导入/导出excel的基本方法

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

从excel文档中,将数据导入sql数据库。很简单。只需使用以下语句:

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

-如果接受数据导入的表已经存在

插入表格select * from

openrowset(Microsoft . jet . oledb . 4.0

,excel 5.0hdr =是;database=c:test.xls,sheet1$)

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

Select * into表from

openrowset(Microsoft . jet . oledb . 4.0

,excel 5.0hdr =是;database=c:test.xls,sheet1$)

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

-如果您将数据从sql数据库导出到excel,如果excel文档已经存在,并且已经根据要接收的数据创建了标题,您可以简单地使用:

插入到openrowset(Microsoft . jet . oledb . 4.0

,excel 5.0hdr =是;database=c:test.xls,sheet1$)

从表中选择*

-如果excel文档不存在,也可以使用bcp将其导入excel文档。注意大小写:

-导出表。

掌握..XP _ cmdshell BCP数据库名. dbo .表名out "c:test.xls" /c -/s "服务器名"/u "用户名"-p "密码"

-导出查询。

掌握..XP _ cmdshell BCP "select au _ fname,au _ lname from pubs..作者顺序按au _ lname " query out " c:test . xls "/c-/s "服务器名"/u "用户名"-p "密码"

/*-描述:

C:test.xls是导入/导出的excel文档的名称。

Sheet1$是excel文档的工作表名称,通常需要加上$才能正常使用。

- */

-如上所述,用bcp导出的是一个类似excel的文档,本质上是一个文本文档。

-要导出真正的excel文档,请使用以下方法

/*-将数据导出到excel

将表格中的数据导出到excel,包括字段名,文档是真正的excel文档。

如果文档不存在,将自动创建。

如果该表不存在,将自动创建。

出于通用性考虑,仅支持导出标准数据类型。

-邹健,2003年10月-*/

/*-调用示例

P_exporttb @tbname=区域数据,@path=c:,@fname=aa.xls

- */

如果存在(select * from dbo.sysobjects其中id = object_id(n[dbo])。[p_exporttb])和objectproperty(id,nisprocedure) = 1)

删除过程。[p_exporttb]

创建过程p_exporttb

@ tbnamesysname,-要导出的表的名称

@ pathnvarchar (1000),-文件存储目录

@ fname nvarchar(250)=-文档名,默认为表名。

如同

声明@err int、@src nvarchar(255)、@desc nvarchar(255)、@out int

声明@obj int、@ const nvarchar(1000)、@sql varchar(8000)、@fdlist varchar(8000)

-参数检测

if isnull(@fname,)= set @fname=@tbname+。电子表格文档

-检查文档是否已经存在。

如果正确(@path,1)设置@path=@path+

创建表#tb(a位、b位、c位)

set @sql=@path+@fname

插入#tb exec master..xp_fileexist @sql

-数据库创建语句

set @sql=@path+@fname

如果存在(从#tb中选择1,其中a=1)

set @ const = driver = { Microsoft excel driver(*。xls)};DSN =;只读=假

+;create _ db = "+;database=+@sql+"

-连接到数据库
exec @ err = sp _ oacreateadodb . connection,@ objout

if @err0转到lberr

exec @err=sp_oamethod @obj,open,null,@ constr

if @err0转到lberr

/*-如果覆盖现有的表,添加以下语句

-在创建之前删除该表/如果它存在。

select @ SQL = drop table[+@ TB name+]

exec @err=sp_oamethod @obj,execute,@out out,@sql

- */

-用于创建表的sql

select @sql=,@fdlist=

select @fdlist=@fdlist+,[+a.name+]

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

+b . name in(char,nchar,varchar,nvarchar)时的大小写,然后

文本(+强制转换(a.length>255,则255,否则a.length以varchar结尾)+)

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

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

当b.name在(money,smallmoney)中时,那么money

else b.name结束

从syscolumns a左连接systypes b on a.xtype=b.xusertype

其中b.name不在(图像、文本、唯一标识符、sql_variant、ntext、varbinary、binary、时间戳)中

和object_id(@tbname)=id

select @ SQL = create table[+@ TB name

+](+子串(@sql,28000)+)

,@fdlist=substring(@fdlist,28000)

exec @err=sp_oamethod @obj,execute,@out out,@sql

if @err0转到lberr

exec @err=sp_oadestroy @obj

-导入数据

set @ SQL = openrowset(Microsoft . jet . oledb . 4.0,excel 5.0hdr =是

;database=+@path+@fname+,[+@tbname+$])

exec(insert into+@ SQL+(+@ FD list+)select+@ FD list+from+@ TB name)

返回

lberr:

exec sp_oageterrorinfo 0,@src out,@desc out

lbexit:

选择(@ err asvarbinary (4))作为错误号

,@src作为错误源,@desc作为错误描述

select @sql,@ constr,@fdlist

-上面是指南表,下面是指南查询语句。

/*-将数据导出到excel

将查询中的数据导出到excel,包括字段名,文档是真正的excel文档。

如果文档不存在,将自动创建。

如果该表不存在,将自动创建。

出于通用性考虑,仅支持导出标准数据类型。

-邹健,2003年10月-*/

/*-调用示例

P_exporttb @sqlstr=select *来自区域数据

,@ path = c,,@ fname = aa.xls,@ sheetname = regional data

- */

如果存在(select * from dbo.sysobjects其中id = object_id(n[dbo])。[p_exporttb])和objectproperty(id,nisprocedure) = 1)

删除过程。[p_exporttb]

创建过程p_exporttb

@ sqlstrvarchar (8000),-查询语句。如果查询语句中使用了order by,请添加top 100。

@ pathnvarchar (1000),-文件存储目录

@ fname nvarchar (250),-文档名

@ sheet name varchar(250)=-要创建的工作表的名称,默认为文档名称。

如同

声明@err int、@src nvarchar(255)、@desc nvarchar(255)、@out int

声明@obj int、@ const nvarchar(1000)、@sql varchar(8000)、@fdlist varchar(8000)

-参数检测

if isnull(@fname,)= set @fname=temp.xls

if isnull(@sheetname,)= set @sheetname=replace(@fname,。,#)

-检查文档是否已经存在。

如果正确(@path,1)设置@path=@path+

创建表#tb(a位、b位、c位)

set @sql=@path+@fname

插入#tb exec master..xp_fileexist @sql

-数据库创建语句

set @sql=@path+@fname

如果存在(从#tb中选择1,其中a=1)

set @ const = driver = { Microsoft excel driver(*。xls)};DSN =;只读=假

+;create _ db = "+;database=+@sql+"

-连接到数据库

exec @ err = sp _ oacreate adodb . connection,@obj out

if @err0转到lberr

exec @err=sp_oamethod @obj,open,null,@ constr

if @err0转到lberr

-用于创建表的sql

声明@tbname sysname

set @ tbname = # # tmp _+convert(varchar(38),newid())

set @ SQL = select * into[+@ TB name+]from(+@ sqlstr+)a

exec(@sql)

select @sql=,@fdlist=

select @fdlist=@fdlist+,[+a.name+]

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

+b . name in(char,nchar,varchar,nvarchar)时的大小写,然后

文本(+强制转换(a.length>255,则255,否则a.length以varchar结尾)+)

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

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

当b.name在(money,smallmoney)中时,那么money

else b.name结束

来自tempdb..syscolumns a左连接临时数据库..a.xtype=b.xusertype上的systypes b

其中b.name不在(图像、文本、唯一标识符、sql_variant、ntext、varbinary、binary、时间戳)中

和a.id=(从tempdb中选择id..sysobjects,其中name=@tbname)

select @ sql =创建表[+@sheetname

+](+子串(@sql,28000)+)

,@fdlist=substring(@fdlist,28000)

exec @err=sp_oamethod @obj,execute,@out out,@sql

if @err0转到lberr

exec @err=sp_oadestroy @obj

-导入数据

set @ SQL = openrowset(Microsoft . jet . oledb . 4.0,excel 5.0hdr =是

;database=+@path+@fname+,[+@sheetname+$])

exec(insert into+@ SQL+(+@ FD list+)select+@ FD list+from[+@ TB name+])

set @sql=drop table [+@tbname+]

exec(@sql)

返回

lberr:

exec sp_oageterrorinfo 0,@src out,@desc out

lbexit:

选择(@ err asvarbinary (4))作为错误号

,@src作为错误源,@desc作为错误描述

select @sql,@ constr,@fdlist


位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 从SQLServer中导入导出Excel的基本方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情