SQL导入导出数据库

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0mm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} pre {margin:0mm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

1

、在SQL
数据库中直接从Excel
里面查询数据:

    

select
 
*
 
from
 
    

OPENROWSET
(
'MICROSOFT.JET.OLEDB.4.0'

    
,
'Excel 5.0;HDR=YES;DATABASE=c:/test.xls'
,sheet1$)
 
2

、从Excel
文件中,
导入数据到SQL
数据库中,

    

select
 
*
 
into
 

from
 
 

OPENROWSET
(
'MICROSOFT.JET.OLEDB.4.0'

 ,
'Excel 5.0;HDR=YES;DATABASE=c:/test.xls'
,sheet1$)
 
3

、从SQL
数据库中,
导出数据到Excel(excel
存在),

    

insert
 
into
 
OPENROWSET
(
'MICROSOFT.JET.OLEDB.4.0'

 ,
'Excel 5.0;HDR=YES;DATABASE=c:/test.xls'
,sheet1$)
 
select
 
*
 
from
 


 
4

、从SQL
数据库中,
导出数据到Excel(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"
密码"'


 
5

、导入导出的存储过程

 
--
下面是导出真正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
(
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 8.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
 
/**//*--
如果覆盖已经存在的表,
就加上下面的语句

--
创建之前先删除表/
如果存在的话

select @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--*/

 
--
创建表的SQL

select
 
@sql
=
''
,
@fdlist
=
''

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

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

  

+
case
 
   

when
 b.name 
like
 
'%char'
 
   

then
 
case
 
when
 a.length
>
255

 
then
 
'memo'

    

else
 
'text('
+
cast
(a.length 
as
 
varchar
)
+
')'
 
end

   

when
 b.name 
like
 
'%int'
 
or
 b.name
=
'bit'
 
then
 
'int'

   

when
 b.name 
like
 
'%datetime'
 
then
 
'datetime'

   

when
 b.name 
like
 
'%money'
 
then
 
'money'

   

when
 b.name 
like
 
'%text'
 
then
 
'memo'

   

else
 b.name 
end

FROM
 syscolumns a 
left
 
join
 systypes b 
on
 a.xtype
=
b.xusertype
where
 b.name 
not
 
in
(
'image'
,
'uniqueidentifier'
,
'sql_variant'
,
'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 8.0;HDR=YES;IMEX=1
   
;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, N
'IsProcedure'
) 
=
 
1

)
drop
 
procedure
 
[dbo]
.
[p_exporttb]

GO

 
/**//*--
数据导出EXCEL

 
 

导出查询中的数据到Excel,
包含字段名,
文件为真正的Excel
文件

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

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

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

 
--
邹建 2003.10(
引用请保留此信息)--*/


 
/**//*--
调用示例

 
 p_exporttb @sqlstr='select * from 
地区资料'

  
,@path='c:',@fname='aa.xls',@sheetname='
地区资料'

--*/

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="'
+
@sql
+
'";DBQ='
+
@sql

else

 
set
 
@constr
=
'Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.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 
like
 
'%char'
 
   

then
 
case
 
when
 a.length
>
255

 
then
 
'memo'

    

else
 
'text('
+
cast
(a.length 
as
 
varchar
)
+
')'
 
end

   

when
 b.name 
like
 
'%int'
 
or
 b.name
=
'bit'
 
then
 
'int'

   

when
 b.name 
like
 
'%datetime'
 
then
 
'datetime'

   

when
 b.name 
like
 
'%money'
 
then
 
'money'

   

when
 b.name 
like
 
'%text'
 
then
 
'memo'

   

else
 b.name 
end

FROM
 tempdb..syscolumns a 
left
 
join
 tempdb..systypes b 
on
 a.xtype
=
b.xusertype
where
 b.name 
not
 
in
(
'image'
,
'uniqueidentifier'
,
'sql_variant'
,
'varbinary'
,
'binary'
,
'timestamp'
)
 
and
 a.id
=
(
select
 id 
from
 tempdb..sysobjects 
where
 name
=
@tbname
)
 
if
 
@@rowcount

=
0

 
return

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值