有關SQLSERVER操作excel

來源:互聯網
上載者:User

1、查詢Excel資料

SELECT *

FROM openrowset('MICROSOFT.JET.OLEDB.4.0',

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

SELECT *

FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',

'Data Source="c:/aa.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[sheet1$]

2、查詢到的資料導成一個Excel檔案

A.BCP

EXEC master..xp_cmdshell 'bcp 庫名.dbo.表名out c:/Temp.xls -c -q -S"servername" -U"sa" -P""'

參數:S 是SQL伺服器名;U是使用者;P是密碼

B、PROC

/*--資料匯出EXCEL

匯出查詢中的資料到Excel,包含欄位名,檔案為真正的Excel檔案

,如果檔案不存在,將自動建立檔案

,如果表不存在,將自動建立表

基於通用性考慮,僅支援匯出標準資料類型

--鄒建 2003.10--

--flystone 修正當檔案存在時建立失敗的情況

*/

/*--調用樣本

p_exporttb @sqlstr='select * from 地區資料'

,@path='c:/',@fname='aa.xls',@sheetname='地區資料'

--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[sp_exporttb]

GO

create proc sp_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 5.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 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 name=@tbname)

if not exists(select 1 from #tb where a=1)

begin

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

end

else

set @fdlist=substring(@fdlist,2,8000)

exec @err=sp_oadestroy @obj

--匯入資料

set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.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

3、往Excel插入資料:

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:/Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/liaolian9948/archive/2010/02/04/5288229.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.