导入/导出Excel
1.--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在
insert
into
表
select
*
from
OPENROWSET ( ' MICROSOFT.JET.OLEDB.4.0 '
, ' Excel 5.0;HDR=YES;DATABASE=c: est.xls ' ,sheet1$)
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$)
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 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
/**/ /*--数据导出EXCEL
导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
--邹建 2003.10(引用请保留此信息)--*/
/**/ /*--调用示例
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 )
-- 参数检测
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
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
/**/ /*--数据导出EXCEL
导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
--邹建 2003.10(引用请保留此信息)--*/
/**/ /*--调用示例
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 )
-- 参数检测
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