從SQLServer中導(dǎo)入和導(dǎo)出Excel的基本方法

這篇文章主要講解了“從SQL Server中導(dǎo)入和導(dǎo)出Excel的基本方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“從SQL Server中導(dǎo)入和導(dǎo)出Excel的基本方法”吧!

站在用戶的角度思考問題,與客戶深入溝通,找到焦作網(wǎng)站設(shè)計(jì)與焦作網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋焦作地區(qū)。

從SQL Server中導(dǎo)入/導(dǎo)出 Excel 的基本方法


/*=================== 導(dǎo)入/導(dǎo)出 Excel 的基本方法 ===================*/

從Excel文件中,導(dǎo)入數(shù)據(jù)到SQL中,很簡單,直接用下面的語句:

/*===================================================================*/
--如果接受數(shù)據(jù)導(dǎo)入的表已經(jīng)存在
insert into 表 select * from
OPENROWSET(MICROSOFT.JET.OLEDB.4.0
,Excel 5.0;HDR=YES;DATABASE=c:test.xls,sheet1$)

--如果導(dǎo)入數(shù)據(jù)并生成表
select * into 表 from
OPENROWSET(MICROSOFT.JET.OLEDB.4.0
,Excel 5.0;HDR=YES;DATABASE=c:test.xls,sheet1$)


/*===================================================================*/
--如果從SQL數(shù)據(jù)庫中,導(dǎo)出數(shù)據(jù)到Excel,如果Excel文件已經(jīng)存在,而且已經(jīng)按照要接收的數(shù)據(jù)創(chuàng)建好表頭,就可以簡單的用:
insert into OPENROWSET(MICROSOFT.JET.OLEDB.4.0
,Excel 5.0;HDR=YES;DATABASE=c:test.xls,sheet1$)
select * from 表


--如果Excel文件不存在,也可以用BCP來導(dǎo)成類Excel的文件,注意大小寫:
--導(dǎo)出表的情況
EXEC master..xp_cmdshell bcp 數(shù)據(jù)庫名.dbo.表名 out "c:test.xls" /c -/S"服務(wù)器名" /U"用戶名" -P"密碼"

--導(dǎo)出查詢的情況
EXEC master..xp_cmdshell bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:test.xls" /c -/S"服務(wù)器名" /U"用戶名" -P"密碼"


/*--說明:
c:test.xls 為導(dǎo)入/導(dǎo)出的Excel文件名.
sheet1$      為Excel文件的工作表名,一般要加上$才能正常使用.
--*/
--上面已經(jīng)說過,用BCP導(dǎo)出的是類Excel文件,其實(shí)質(zhì)為文本文件,

--要導(dǎo)出真正的Excel文件.就用下面的方法


/*--數(shù)據(jù)導(dǎo)出EXCEL

導(dǎo)出表中的數(shù)據(jù)到Excel,包含字段名,文件為真正的Excel文件
,如果文件不存在,將自動(dòng)創(chuàng)建文件
,如果表不存在,將自動(dòng)創(chuàng)建表
基于通用性考慮,僅支持導(dǎo)出標(biāo)準(zhǔn)數(shù)據(jù)類型
--鄒建 2003.10--*/

/*--調(diào)用示例

p_exporttb @tbname=地區(qū)資料,@path=c:,@fname=aa.xls
--*/
if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[p_exporttb]) and OBJECTPROPERTY(id, NIsProcedure) = 1)
drop procedure [dbo].[p_exporttb]
GO

create proc p_exporttb
@tbname sysname,    --要導(dǎo)出的表名
@path nvarchar(1000),   --文件存放目錄
@fname nvarchar(250)= --文件名,默認(rèn)為表名
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

--參數(shù)檢測
if isnull(@fname,)= set @fname=@tbname+.xls

--檢查文件是否已經(jīng)存在
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

--數(shù)據(jù)庫創(chuàng)建語句
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="    +;DATABASE=+@sql+"


--連接數(shù)據(jù)庫
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

/*--如果覆蓋已經(jīng)存在的表,就加上下面的語句
--創(chuàng)建之前先刪除表/如果存在的話
select @sql=drop table [+@tbname+]
exec @err=sp_oamethod @obj,execute,@out out,@sql
--*/

--創(chuàng)建表的SQL
select @sql=,@fdlist=
select @fdlist=@fdlist+,[+a.name+]
,@sql=@sql+,[+a.name+]
+case when b.name in(char,nchar,varchar,nvarchar) then
     text(+cast(case when a.length>255 then 255 else a.length end as varchar)+)
   when b.name in(tynyint,int,bigint,tinyint) then int
   when b.name in(smalldatetime,datetime) then datetime
   when b.name in(money,smallmoney) then money
   else b.name end
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
where b.name not in(image,text,uniqueidentifier,sql_variant,ntext,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

--導(dǎo)入數(shù)據(jù)
set @sql=openrowset(MICROSOFT.JET.OLEDB.4.0,Excel 5.0;HDR=YES
   ;DATABASE=+@path+@fname+,[+@tbname+$])

exec(insert into ) select  from )

return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
lbexit:
select cast(@err as varbinary(4)) as 錯(cuò)誤號
,@src as 錯(cuò)誤源,@desc as 錯(cuò)誤描述
select @sql,@constr,@fdlist
go
--上面是導(dǎo)表的,下面是導(dǎo)查詢語句的.

/*--數(shù)據(jù)導(dǎo)出EXCEL

導(dǎo)出查詢中的數(shù)據(jù)到Excel,包含字段名,文件為真正的Excel文件
,如果文件不存在,將自動(dòng)創(chuàng)建文件
,如果表不存在,將自動(dòng)創(chuàng)建表
基于通用性考慮,僅支持導(dǎo)出標(biāo)準(zhǔn)數(shù)據(jù)類型
--鄒建 2003.10--*/

/*--調(diào)用示例

p_exporttb @sqlstr=select * from 地區(qū)資料
,@path=c:,@fname=aa.xls,@sheetname=地區(qū)資料
--*/
if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[p_exporttb]) and OBJECTPROPERTY(id, NIsProcedure) = 1)
drop procedure [dbo].[p_exporttb]
GO

create proc p_exporttb
@sqlstr varchar(8000),   --查詢語句,如果查詢語句中使用了order by ,請加上top 100 percent
@path nvarchar(1000),   --文件存放目錄
@fname nvarchar(250),   --文件名
@sheetname varchar(250)= --要?jiǎng)?chuàng)建的工作表名,默認(rèn)為文件名
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

--參數(shù)檢測
if isnull(@fname,)= set @fname=temp.xls
if isnull(@sheetname,)= set @sheetname=replace(@fname,.,#)

--檢查文件是否已經(jīng)存在
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

--數(shù)據(jù)庫創(chuàng)建語句
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="    +;DATABASE=+@sql+"

--連接數(shù)據(jù)庫
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

--創(chuàng)建表的SQL
declare @tbname sysname
set @tbname=##tmp_+convert(varchar(38),newid())
set @sql=select * into [+@tbname+] from() a
exec(@sql)

select @sql=,@fdlist=
select @fdlist=@fdlist+,[+a.name+]
,@sql=@sql+,[+a.name+]
+case when b.name in(char,nchar,varchar,nvarchar) then
     text(+cast(case when a.length>255 then 255 else a.length end as varchar)+)
   when b.name in(tynyint,int,bigint,tinyint) then int
   when b.name in(smalldatetime,datetime) then datetime
   when b.name in(money,smallmoney) then money
   else b.name end
FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
where b.name not in(image,text,uniqueidentifier,sql_variant,ntext,varbinary,binary,timestamp)
and a.id=(select id from tempdb..sysobjects where )
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

--導(dǎo)入數(shù)據(jù)
set @sql=openrowset(MICROSOFT.JET.

感謝各位的閱讀,以上就是“從SQL Server中導(dǎo)入和導(dǎo)出Excel的基本方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對從SQL Server中導(dǎo)入和導(dǎo)出Excel的基本方法這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

分享文章:從SQLServer中導(dǎo)入和導(dǎo)出Excel的基本方法
瀏覽路徑:http://www.muchs.cn/article28/ijcjcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站維護(hù)App設(shè)計(jì)、用戶體驗(yàn)、網(wǎng)站策劃、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)