數據庫導入導出Excel
系統
1648 0
--
從Excel文件中,導入數據到SQL數據庫中,很簡單,直接用下面的語句:
/**/
/**/
/**/
/*
===================================================================
*/
--
如果接受數據導入的表已經存在
insert
into
表
select
*
from
OPENROWSET
(
'
MICROSOFT.JET.OLEDB.4.0
'
,
'
Excel5.0;HDR=YES;DATABASE=c: est.xls
'
,sheet1$)
--
如果導入數據并生成表
select
*
into
表
from
OPENROWSET
(
'
MICROSOFT.JET.OLEDB.4.0
'
,
'
Excel5.0;HDR=YES;DATABASE=c: est.xls
'
,sheet1$)
--
補充幾句如果系統顯示
/**/
/*
SQLServer阻止了對組件'AdHocDistributedQueries'的STATEMENT'OpenRowset/OpenDatasource'的訪問,因為此組件已作為此服務器安全配置的一部分而被關閉。系統管理員可以通過使用sp_configure啟用'AdHocDistributedQueries'。有關啟用'AdHocDistributedQueries'的詳細信息,請參閱SQLServer聯機叢書中的"外圍應用配置器"。
因為SQL2005默認是沒有開啟'AdHocDistributedQueries'組件,開啟方法如下
*/
EXEC
sp_configure
'
showadvancedoptions
'
,
1
GO
RECONFIGURE
GO
EXEC
sp_configure
'
AdHocDistributedQueries
'
,
1
GO
RECONFIGURE
GO
/**/
/**/
/**/
/*
===================================================================
*/
--
如果從SQL數據庫中,導出數據到Excel,如果Excel文件已經存在,而且已經按照要接收的數據創建好表頭,就可以簡單的用:
insert
into
OPENROWSET
(
'
MICROSOFT.JET.OLEDB.4.0
'
,
'
Excel5.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"SELECTau_fname,au_lnameFROMpubs..authorsORDERBYau_lname"queryout"c: est.xls"/c-/S"服務器名"/U"用戶名"-P"密碼"
'
/**/
/**/
/**/
/*
--說明:
c: est.xls為導入/導出的Excel文件名.
sheet1$為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
(
select
1
from
#tb
where
a
=
1
)
set
@constr
=
'
DRIVER={MicrosoftExcelDriver(*.xls)};DSN=
''''
;READONLY=FALSE
'
+
'
;CREATE_DB="
'
+
@sql
+
'
";DBQ=
'
+
@sql
else
set
@constr
=
'
Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties="Excel8.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='droptable['+@tbname+']'
exec@err=sp_oamethod@obj,'execute',@outout,@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
syscolumnsa
left
join
systypesb
on
a.xtype
=
b.xusertype
where
b.name
not
in
(
'
image
'
,
'
uniqueidentifier
'
,
'
sql_variant
'
,
'
varbinary
'
,
'
binary
'
,
'
timestamp
'
)
and
object_id
(
@tbname
)
=
id
select
@sql
=
'
createtable[
'
+
@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
''
,
''
Excel8.0;HDR=YES;IMEX=1
;DATABASE=
'
+
@path
+
@fname
+
'''
,[
'
+
@tbname
+
'
$])
'
exec
(
'
insertinto
'
+
@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
數據庫導入導出Excel
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元