給冰冰魚整理的有關SQLSERVER操作excel

2021-08-24 21:03:59 字數 4594 閱讀 8732

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=;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

endelse

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)

有關GDB除錯的整理

使用gdb除錯,要在編譯時使用 g 進入除錯。如果沒有 g,將看不見程式的函式名 變數名,所代替的全是執行時的記憶體位址。預設生成的可執行檔案a.out g test.cpp g gdb a.out 自己定義生成的可執行檔案test g test.cpp o test g gdb test 如果程式...

有關MySQL的一些整理

在日常的使用中我經常的會忘記一些sql語句的使用方法,這裡就整理了一下,方便以後使用。create table person id bigint 8 not null auto increment comment 主鍵id person name varchar 32 not null commen...

有關const關鍵字的整理

顧名思義const是constant的縮寫,意義為永恆不變的意思。常常被翻譯為常量,常數等意思。但是很不幸,正是由於這一點導致很多c程式設計師認為const修飾的值為常數。這是不正確的,const修飾的是唯讀變數,在預處理 編譯 時是不知道具體內容的。在c語言中,這樣寫乙個函式對嗎?為什麼呢?con...