导入/导出Excel
1.--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在
insert
into
表
select
*
from
OPENROWSET
(
'
MICROSOFT.JET.OLEDB.4.0
'
,
'
Excel 5.0;HDR=YES;DATABASE=c: est.xls
'
,sheet1$)
--如果导入数据并生成表
select
*
into
表
from
OPENROWSET
(
'
MICROSOFT.JET.OLEDB.4.0
'
,
'
Excel 5.0;HDR=YES;DATABASE=c: est.xls
'
,sheet1$)
/*===================================================================*/
2.--从SQL数据库中,导出数据到Excel:
--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
insert
into
OPENROWSET
(
'
MICROSOFT.JET.OLEDB.4.0
'
,
'
Excel 5.0;HDR=YES;DATABASE=c: est.xls
'
,sheet1$)
select
*
from
表
--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC
master..xp_cmdshell
'
bcp 数据库名.dbo.表名 out "c: est.xls" /c -/S"服务器名" /U"用户名" -P"密码"
'
--导出查询的情况
EXEC
master..xp_cmdshell
'
bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c: est.xls" /c -/S"服务器名" /U"用户名" -P"密码"
'
/*--说明:
c:/test.xls 为导入/导出的Excel文件名.
sheet1$ 为Excel文件的工作表名,一般要加上$才能正常使用.
--*/
3.--建立存储过程,导出真正的Excel文件(用此方法导出的Excel文件在用于导入时不会报错)
--
下面是导出真正Excel文件的方法:(请将一下所有代码复制到存储过程中)
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
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/*--数据导出EXCEL
导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
--邹建 2003.10(引用请保留此信息)--*/
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/**/
/*--调用示例
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
p_exporttb @tbname='地区资料',@path='c:',@fname='aa.xls'
--*/
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
)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
--
参数检测
if
isnull
(
@fname
,
''
)
=
''
set
@fname
=
@tbname
+
'
.xls
'
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
--
检查文件是否已经存在
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
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
--
数据库创建语句
set
@sql
=
@path
+
@fname
if
exists