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